005. MyBatis基本使用---02初始化工具类MyBatisUtils
1.什么是SqlSessionFactory
2. src/main/java/com/imooc/mybatis/utils/MyBatisUtils.java
package com.imooc.mybatis.utils; 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 java.io.IOException; import java.io.Reader; /** * MyBatisUtils工具类,创建全局唯一的SqlSessionFactory对象 */ public class MyBatisUtils { //利用static(静态)属于类不属于对象,且全局唯一 private static SqlSessionFactory sqlSessionFactory = null; //利用静态块在初始化类时实例化sqlSessionFactory static { Reader reader = null; try { reader = Resources.getResourceAsReader("mybatis-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); //初始化错误时,通过抛出异常ExceptionInInitializerError通知调用者 throw new ExceptionInInitializerError(e); } } /** * openSession 创建一个新的SqlSession对象 * @return SqlSession对象 */ public static SqlSession openSession(){ return sqlSessionFactory.openSession(); } /** * 释放一个有效的SqlSession对象 * @param session 准备释放SqlSession对象 */ public static void closeSession(SqlSession session){ if(session != null){ session.close(); } } }
3.测试方法
@Test public void testSqlSessionFactory() throws IOException { //利用Reader加载classpath下的mybatis-config.xml核心配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); //初始化SqlSessionFactory对象,同时解析mybatis-config.xml文件 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); System.out.println("SessionFactory加载成功"); SqlSession sqlSession = null; try { //创建SqlSession对象,SqlSession是JDBC的扩展类,用于与数据库交互 sqlSession = sqlSessionFactory.openSession(); //创建数据库连接(测试用) Connection connection = sqlSession.getConnection(); System.out.println(connection); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { //如果type="POOLED",代表使用连接池,close则是将连接回收到连接池中 //如果type="UNPOOLED",代表直连,close则会调用Connection.close()方法关闭连接 sqlSession.close(); } } }