【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 {@Testpublic void test1() {BlogService service = new BlogService();Blog blog = service.selectBlogById();System.out.println(blog.getTitle());}
}
2)测试结果(Bingo):
【4】梳理 mybatis 从 client 到db 的 调用过程;