SqlSessionFactoryBuilder是用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的生命周期应该是整个应用范围,全局范围只有一个工厂,应使用单例模式实现. 与spring集成之后,由spring来对其进行单例管理
SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作方法,可以通过SqlSessionFactory.openSession()来获取
SqlSession,内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部并及时关闭。
传统的Dao开发
配置映射文件User.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="test">
<select id="findUserById" parameterType="int" resultType="com.test.domain.User">
SELECT * FROM USER WHERE id =#{id}
</select>
</mapper>
在SqlMapConfig.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">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="User.xml" />
<!-- 批量加载映射文件 -->
<!-- <package name="com.test.mybatis.mapper" /> -->
</mappers>
</configuration>
创建Dao接口
package com.test.dao;
import com.test.domain.User;
public interface IUserDao {
User findUserById(int id);
}
创建Dao实现类
package com.test.dao.impl;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.test.dao.IUserDao;
import com.test.domain.User;
public class UserDaoImpl implements IUserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory = sqlSessionFactory;
}
public User findUserById(int id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById",id);
sqlSession.close();
return user;
}
}
测试代码
@org.junit.Test
public void test_01() throws Exception{
//读取配置文件
//全局配置文件的路径
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
IUserDao userDao = new UserDaoImpl(sqlSessionFactory);
User user = userDao.findUserById(28);
System.out.println(user);
}