构造器,根据配置信息负责生成SqlSessionFactory(工厂接口)。
依靠本工厂接口来生成SqlSession
下面给一个实例看如何由SqlSessionFactoryBuild创建SqlSessionFactory,并获得SqlSession。
package forum.dao; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.BeforeClass; public class BaseMapperTest{ private static SqlSessionFactory sqlSessionFactory; @BeforeClass public static void init() { System.out.println("sys statup"); try { //读取配置文件 Reader reader = Resources.getResourceAsReader("res/mybatis/mybatis-config.xml"); //获取sqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); reader.close(); } catch(IOException ex) { ex.printStackTrace(); } } /*返回sqlSession/ public SqlSession getSqlSession() { return BaseMapperTest.sqlSessionFactory.openSession(); } }获取sqlSession
public class UserMapperTest extends BaseMapperTest { @Test public void SelectByIdTest() { SqlSession sqlSession = getSqlSession(); try { //根据映射接口类获得实例 TUserMapper userMapper = sqlSession.getMapper(TUserMapper.class) //执行Sql处理,并返回执行结果 TUser user = userMapper.selectByPrimaryKey(1); printUser(user); } finally { //使用完后关闭sqlSession,不要忘记 sqlSession.close(); } } }SqlSessionFactoryBuilder是利用注解或者XML方式创建SqlSessionFactory。通过它可以构建多个SqlSessionFactory,一旦构建完成就失去了作用,因此它的生命周期只存在局部方法内。
每次程序访问数据库,需要通过SqlSessionFactory获取SqlSession,因此它的生命周期存在Mybatis的整个生命周期中。 如果一个数据库创建多个SqlSessionFactory,每次创建都会打开更多的数据库连接资源,那么数据库的连接资源很快就会耗尽。 因此每个数据库应该只创建一个SqlSessionFactory。