SqlSessionFactoryBuilder
作用
SqlSessionFactoryBuilder 的作用在于创建SqlSessionFactory,创建成功后就失去了作用,所以它只能作用于创建SqlSessionFactory方法中,它的最佳的生命周期是方法级别的
使用
public class UserTest { private final static SqlSessionFactory sqlSessionFactory; static { String resource = "mybatis-config.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(resource); } catch (IOException e) { System.out.println(e.getMessage()); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } @Test public void test1(){ SqlSession sqlSession = sqlSessionFactory.openSession(); final UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class); final UserInfo userInfo = mapper.selectByPrimaryKey(3L); System.out.println(userInfo.getName()); sqlSession.close(); } }
源码
SqlSessionFactoryBuilder 有 9个重载的方法
上面例子中使用的是 build(Reader reader) 这个方法,但这个方法最终调用的还是 build(Reader reader, String environment, Properties properties) ,代码如下
public SqlSessionFactory build(Reader reader) { return build(reader, null, null); } public SqlSessionFactory build(Reader reader, String environment, Properties properties) { try { XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties); // 配置文件解析 获取到Configuration对象 返回SqlSessionFactory return build(parser.parse()); } catch (Exception e) { throw ExceptionFactory.wrapException("Error building SqlSession.", e); } finally { ErrorContext.instance().reset(); try { reader.close(); } catch (IOException e) { // Intentionally ignore. Prefer previous error. } } }
不管哪个build()方法,最终调用的都是build(Configuration config) 来解析配置文件
public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
SqlSessionFactoryBuilder 的内容就这些,剩下的都交给了SqlSessionFactory 。
