码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis介绍

时间:2017-10-24 00:05:02      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:安全   调用   package   void   pojo   res   url   environ   where   

这是个开源的持久层框架。有几个特点:第一个是轻;第二个是将sql语句和代码分离;第三个是很好地支持java中复杂数据的映射;第四个是,我们用jdbc的时候要去拼凑sql语句,这种方式是不安全的,也不方便,mybatis这里用的是动态sql技术来代替这种拼凑sql语句。

使用的时候要导入相关jar包还有MySQL相关jar包,如果要输出sql语句的话,还要配置位置文件,就要加入log4j.properties这个文件。

在mybatis中有两种配置文件,一种是基本配置文件,一种是mapper配置文件也叫映射。通过配置文件我们可以建立SqlSessionFactory和SqlSession

 

下面介绍一下mybaits的工作流程:

  1.读取基本配置文件,这里包含着连接数据库的信息;

  2.然后就会生成SqlSessionFactory,这是个sqlsession的工厂,用来建立和数据库之间的会话。

  3.有了SqlSessionFactory之后就可以建立SqlSession,这个东西的目的是用来执行sql语句,它通过调用mybatis中各种各样的api函数来执行sql语句。

  4.sql语句则放在另一个配置文件里,就是我们的MAP配置文件。

  5.返回结果。

  6.关闭sqlsession。

 

基本配置文件:

(一般可以找现成的MyBatis配置文件,比如上Github上找)

基本配置文件大概由两部分组成,一部分是连接数据库的信息,另一部分是map配置文件的位置。

基本配置文件有两个元素,一个是

<environments defaults="development">

  <environment id="development">

..

  </environment>

<environments>

这里边叫环境,里面封装的就是连数据库的相关信息。 环境里面会有多个environment,每个environment代表的是连接的一种数据库,里面包含连接这种数据库的所有信息。

还有一个元素就是

<mappers>

  <mapper resource="map/MapUser.xml"></mapper>

  <mapper resource="map/MapVisit.xml"></mapper>

</mappers>

这里包含的是映射配置文件的映射信息。

 

 

关于sqlsessionfactory和sqlsession的生命周期:

  sqlsessionfactory的生命周期是程序级的,一般的程序只有一个factory,程序开始它会建立,程序结束它会消亡。

  sqlsession的生命周期是过程级的, 在一个方法中它会建立,方法结束它会销毁。

sqlsession和sqlsessionfactory的建立代码:

  SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);    //reader是个输入流,这个流就是基本配置的文件路径。

  SqlSession session = sqlMapper.openSession(); 

 

Map文件:

mybatis的sql和代码之所以能够分开,靠的就是Map文件,Map文件中包含的是全部的sql代码,那么map文件怎么被找到呢,是在基本配置文件中来引用它的,这种引用的方式有三种:

技术分享

 

第一种是相对路径引用,把map文件当作一个资源,resource,接的是个路径,也是个包路径也是个目录(图中那个其实类xml就在 包jike.book.map里的jikeUser.xml);     第二种方式是采用绝对路径的一种引用,采用的是java的url技术,这样你的文件可以在文件上,网络等都可以;       第三种路径是采用包路径引用,用的是package。  

 

现在来看看map文件是什么样的,来看一个简单的map文件里的sql语句:

<select id="findById" parameterType="int" resultType="jike.book.pojo.JiKeUser">
    select * from JikeUser where id=#{id}
</select>

这里我们看到的是一个select语句,这里先是一个select元素来包含这个语句。     元素的主题部分就是我们的select的sql语句,这个语句基本和我们正常的sql语句差不多,但是就是在id=#{id}这不太一样,这里#后面的内容代表的是一个参数,参数的名称叫id。  这里就可以类比jdbc的PreparedStatement接口的那个     ?    ,就是先准备一个sql语句,完了往里面填参数。

这里的select元素有三个属性,一个是id属性,这是找到这条sql语句的标志;      还有就是parameterType属性,它的作用是确定这个参数的类型,比如这里是int型;         还有就是resultType属性,它的作用就是确定返回值的类型,可以是map,也可以是java中的基本数据类,也可以是对象。

来看看查询的代码:(首先我们的数据库的表叫JiKeUser,表中有三个四个键,主键id,键name,键password,在Java中也有它的对应的实体类JiKeUser)

(这里顺便科普一下,POJO类就是数据库中表或数据对应的实体类)

JiKeUser temp = session.selectOne("findById",1);//调用session的查询方法,第一个参数是那个sql语句的id,第二个是给sql语句的参数。
System.out.println("name="+temp,getUserName());
session.close();//关闭session

 

 

看个完整的例子:

public static void main(String[] args) {
    String resource = "jike/book/map/MyBatisConfig.xml";
    Reader reader = null;
    SqlSession session =null;
    try {
        reader = Resources.getResourceAsReader(resource);
    } catch(IOException e) {
        e.printStackTrace();
    }
    SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder.build(reader);
    session = sqlMapper.openSession();
    JiKeUser temp = session.selectOne("findById",1);
    System.out.println("name="+temp.getUserName());
    session.close();
}

 

Mybatis介绍

标签:安全   调用   package   void   pojo   res   url   environ   where   

原文地址:http://www.cnblogs.com/wangshen31/p/7719624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!