mybatis(一)

一. 环境搭建

首先,需要的jar包以及源码从GitHub上下载,地址为:https://github.com/mybatis/mybatis-3/releases,从这里可以看到各个历史版本。jar包解压后,里面有一个官方的Mybatis文档。Mybatis的jar包就一个:mybatis-3.4.6.jar.里面其他的jar包是一些辅助的包,非必须。

小技巧:下载的源码可以用来在Eclipse中与mybatis进行关联,这样就能看到源码以及注释了,有助于学习。

方法:如图,双击mybatis包中的一个类,右边出现Attach Source按钮,点击之,选中Mybatis的源码(打包的zip文件),关联以后,就可以看到源码了。

源码如下:

 

鼠标放到某一个类或借口上,可以看到源码中写的注释:

 

然后建立一个Java工程,建立如下的包和目录,并Build Path,将Mybatis相关的包都引入,还有一个MySQL驱动包也需要引入,因为需要连接数据库。

 

二.           各个文件中的内容以及解析

mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <environments default="development">

      <environment id="development">

        <transactionManager type="JDBC" />

        <dataSource type="POOLED">

           <property name="driver" value="com.mysql.jdbc.Driver" />

           <property name="url" value="jdbc:mysql://192.168.0.5:3306/test" />

           <property name="username" value="root" />

           <property name="password" value="123456" />

        </dataSource>

      </environment>

   </environments>

   <mappers>

      <mapper resource="mapper/TestManageTypeMapper.xml" />

   </mappers>

</configuration>

该配置文件分为两部分,第一部分是mysql数据库的相关配置信息,后面是Java bean类对应的xml配置文件,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zkm.learn.mybatis.bean.TestManageTypeMapper">

   <select id="selectTestManageType" resultType="com.zkm.learn.mybatis.bean.TestManageType">

      select * from test_manage_type where MANAGE_TYPE_ID = #{id}

   </select>

</mapper>

   namespace写成什么无所谓,这里写成java类的包名加上TestManageTypeMapper,即类名加Mapper。resultType是在调用该方法时返回的数据类型,这里写Bean类的全名。Select语句就是该方法执行的SQL语句。这里要与调用时的方法对应着看。

三.           启动测试

新建上图所示的Junit测试类MybatisTest,内容如下:

 

public class MybatisTest {

 

   @Before

   public void befores(){

      System.out.println(new Date());

   }

   @Test

   public void test() throws IOException {

//    fail("Not yet implemented");

      String resource = "conf/mybatis-config.xml";

      InputStream inputStream = Resources.getResourceAsStream(resource);

      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

      SqlSession sqlSession = sqlSessionFactory.openSession();

      try{

        String id = "4028804c599cdafd0159a1ccbb19004e";

        TestManageType type = sqlSession.selectOne("com.zkm.learn.mybatis.bean.TestManageTypeMapper.selectTestManageType", id);

        System.out.println(type);

      }finally{

        sqlSession.close();

      }

   }

 

}

该文件首先载入配置文件mybatis-config.xml,然后获取session,执行session的方法selectOne,注意该方法第一个参数上述TestManagerTypeMapper.xml配置文件中的namespace加上select id,后面是表的ID,返回值就是配置文件指明的类。

四.接口式编程

        上述方法是以前的使用方法,更先进的是接口式编程,首先建立一个及接口,如下所示:

然后对配置文件XXXmapper.xml进行修改,将里面的namespace改为接口的全类名,select标签的id与接口中方法名称相对应,如下所示:

再写一个测试类:

sqlSessionFactory因为经常使用,已经在类中处理过了,将其定义为类的属性,在@Before方法中获取了。注意看这个方法,首先获取mapper接口,然后调用该接口的方法获取对象。请注意没有为此接口写实现类,实际上Mybatis根据提供的信息自动生成了一个代理对象class $proxy.

五.总结

        1.传统的接口编程,都是给接口写实现类,如Dao--->DaoImpl,而现在Mybatis会为接口生成代理类,不用写实现类。

        2.sqlsession代表和数据库的一次会话,用完必须关闭

        3.sqlsession和数据库的Connection一样,都不是线程安全的,每次使用都应该获取新的对象

        4.不用为mapper接口写实现类,mybatis会为它生成一个代理对象。TestManageTypeMapper mapper = sqlSession.getMapper(TestManageTypeMaper.class);

        5.两个重要配置文件:

     mybatis-config:这是mybatis全局配置文件,包括了数据库连接池,事物配置等信息。

          sql映射文件XXXmapper.xml:上面那个文件可以没有,这个必须要有。就是通过这个文件将SQL抽取出来。

posted @ 2018-07-06 22:45  鱼儿快快飞  阅读(98)  评论(0编辑  收藏  举报