【0】README
0)以下部分内容转自:“mybatis v.3.4.0 User Guide”;
1)本文旨在梳理 如何 构建 mybatis 环境,与 db 连接,且采用 JUnit 搭建其测试用例;
2)本文的环境配置都是基于纯 mybatis 的 jar 包,没有和 spring 或 springmvc 等第三方框架结合;测试用例通过 JUnit 来做;
3)for complete source code including mybatis jar and source jar, please visit https://github.com/pacosonTang/MyBatis/tree/master/mybatis_user_guide2
【1】mybatis 核心对象的作用域和生命周期
1)核心对象:
1.1)SqlSessionFactoryBuilder:用来创建SqlSessionFactory 对象; 一旦使用该对象创建了 SqlSessionFactory 对象后,它就可以被 jvm 销毁了,故其最佳作用域是在方法内,即在方法内部声明 SqlSessionFactoryBuilder 对象来创建 SqlSessionFactory;(干货——创建完 SqlSessionFactory 实例后,SqlSessionFactoryBuilder 就可以被销毁了)1.2)SqlSessionFactory:用来创建SqlSession对象;该实例应该在应用程序执行期间都存在;不需要每次操作数据库是都重新创建它,所以应用它的最佳方式是写一个单例模式来创建;(干货——采用单例模式来创建 SqlSessionFactory)package com.mybatis.service; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class BaseService { protected static SqlSessionFactory sqlSessionFactory; public BaseService() { sqlSessionFactory = createSqlSessionFactory(); } private static SqlSessionFactory createSqlSessionFactory() { if(sqlSessionFactory == null) { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } return new SqlSessionFactoryBuilder().build(inputStream); } else { return sqlSessionFactory; } } public SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } }
1.3)SqlSession:用来获取映射器;每个线程都有它自己的 SqlSession实例,该实例是不能被共享且是线程不安全的;它的最佳作用域是request 请求 或 方法作用域;即每一次request 请求都要创建一个 SqlSession 实例;(不能再干货——每次访问结果后,请务必关闭 SqlSession)
package com.mybatis.service; import org.apache.ibatis.session.SqlSession; import com.mybatis.dao.BlogMapper; import com.mybatis.model.Blog; public class BlogService extends BaseService { private SqlSession session; public BlogService() { super(); session = sqlSessionFactory.openSession(); } public SqlSession openSession() { return sqlSessionFactory.openSession(); // sqlSessionFactory 由 BaseService 创建. } public Blog selectBlogById() { // method2. strongly recommended. session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session. getMapper(BlogMapper.class); return mapper.selectBlog(1); } finally { session.close(); } /*try { // method1. Blog blog = session.selectOne("com.mybatis.dao.BlogMapper.selectBlog", 1); return mapper.selectBlog(1); } finally { session.close(); }*/ } }
2)映射器:要知道 mybatis 可以对方法进行映射,将 数据库访问方法的输入和输出参数都看做是对象;(干货——mybatis 可以对方法进行映射,将 数据库访问方法的输入和输出参数都看做是对象,多个输入参数添加到Map)
step1)获取映射器:它是有 上述提到到 SqlSession 得到的;step2)调用该映射器的相关方法: 与数据库进行交互, Bingo;Attention)参见 上面 com.mybatis.service.BlogService.java;
【2】mybatis 环境配置
step1)获取 mybatis的 jar 和 source jar, 安装 generator mybatis的插件,参见 http://blog.csdn.net/pacosonswjtu/article/details/51693186,当然也可以maven 自行构建;step2)建立数据库和数据库表;![]()
step3)修改 generatorConfig.xml文件,然后利用generator 自动生成 mybatis 映射文件![]()
step4)配置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> <properties resource="jdbc.properties" /> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/dao/BlogMapper.xml" /> </mappers> </configuration>
step4.1)建立 mybatis-config.xml文件用到的 jdbc.properties 属性文件;driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/t_mybatis username=root password=root #定义初始连接数 initialSize=0 #定义最大连接数 maxTotal=20 #定义最大空闲 maxIdle=20 #定义最小空闲 minIdle=1 #定义最长等待时间 maxWait=60000
step4.2)配置 mybatis-config.xml文件用到的 刚刚生成的 BlogMapper.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.mybatis.dao.BlogMapper"> <select id="selectBlog" resultType="com.mybatis.model.Blog"> select * from Blog where id = #{id} </select> </mapper>
Attention)至此,mybatis的环境搭建已经完毕,请依照个人习惯,将上述映射文件,配置文件放入到 习惯性的 package 下面;(package 变了,注意要修改相关的 xml 文件)
【3】建立测试用例
1)测试用例如下:
public class MyTest {
@Test
public void test1() {
BlogService service = new BlogService();
Blog blog = service.selectBlogById();
System.out.println(blog.getTitle());
}
}
2)测试结果(Bingo):
【4】梳理 mybatis 从 client 到db 的 调用过程;