← 返回首页
Mybatis基础教程(四)
发表时间:2022-03-01 22:50:34
SqlSessionFactoryBuilder

1.SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory。通过它可以构建过个SqlSessionFactory。它的作用就是一个构建器,一旦我们构建了SqlSessionFactory,它的作用也就消失了。

SqlSessionFactoryBuilder提供了多个重载的build()方法。

我们把第一个mybatis案例改写,项目结构图如下:

1).在resources下创建db.properties

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true
mysql.username=root
mysql.password=root

2).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="db.properties"/>

    <!-- 配置映射类的别名 -->
    <typeAliases>
        <typeAlias alias="Users" type="com.entity.Users"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mapper/usersMapper.xml"/>
    </mappers>

</configuration>

3).编写UsersMapperTest单元测试,测试SqlSessionFactoryBuilder.builder()的三种用法。

public class UsersMapperTest {
    //传入字符流
    @Test
    public void testSqlSessionFactoryBuilder1(){
        String resource = "mybatis-config.xml";
        Reader is = null;
        Configuration config=null;
        try {
            is = Resources.getResourceAsReader(resource);
            //构建sqlSession的工厂
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession session = sessionFactory.openSession();

            String statement = "com.mapper.usersMapper.getUser";//映射sql的标识字符串
            //执行查询返回一个唯一user对象的sql
            Users user = session.selectOne(statement, 3);
            System.out.println(user);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

    //传入字节流
    @Test
    public void testSqlSessionFactoryBuilder2(){
        String resource = "mybatis-config.xml";
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream(resource);
            //构建sqlSession的工厂
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession session = sessionFactory.openSession();

            String statement = "com.mapper.usersMapper.getUser";//映射sql的标识字符串
            //执行查询返回一个唯一user对象的sql
            Users user = session.selectOne(statement, 3);
            System.out.println(user);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

    //传入configuration
    @Test
    public void testSqlSessionFactoryBuilder3(){
        String resource = "mybatis-config.xml";
        Configuration config = null;
        try {
            XMLConfigBuilder configBuilder = new XMLConfigBuilder(Resources.getResourceAsStream(resource));
            config = configBuilder.parse();
            //构建sqlSession的工厂
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(config);
            SqlSession session = sessionFactory.openSession();
            String statement = "com.mapper.usersMapper.getUser";//映射sql的标识字符串
            //执行查询返回一个唯一user对象的sql
            Users user = session.selectOne(statement, 3);
            System.out.println(user);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}