SqlSessionFactory
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,因此 SqlSessionFactory 的最佳作用域是应用作用域。最简单的就是使用单例模式或者静态单例模式。
以下是用枚举实现单例的代码:
package com.mybatisTest.db; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.Reader; /** * 实现单例的SqlSessionFactory */ public enum SqlSessionFactorySingleton { GETSQLSESSIONFACTORY("mybatis-config/Configuration.xml"); private SqlSessionFactory sqlSeeionFactory; private String xmlPath; SqlSessionFactorySingleton(String xmlPath){ this.xmlPath=xmlPath; } public SqlSessionFactory getSqlSeeionFactory(){ if(sqlSeeionFactory==null){ sqlSeeionFactory= new GetSqlSeeionFactory(xmlPath).getSqlSessionFactory(); return sqlSeeionFactory; }else { return sqlSeeionFactory; } } private class GetSqlSeeionFactory{ private String xmlPath; public GetSqlSeeionFactory(String xmlPath){ this.xmlPath=xmlPath; } public SqlSessionFactory getSqlSessionFactory(){ try { //通过配置文件获取数据库连接信息 Reader resourceAsReader = Resources.getResourceAsReader(xmlPath); System.out.println("枚举单例创建SqlSessionFactory"); //通过配置信息构建一个SqlSessionFactory return new SqlSessionFactoryBuilder().build(resourceAsReader); } catch (IOException e) { e.printStackTrace(); } return null; } } } 调用端:
SqlSessionFactory sqlSessionFactory= SqlSessionFactorySingleton.GETSQLSESSIONFACTORY.getSqlSeeionFactory();
备注:
需要引入mybatis的jar包或在pom.xml文件引入
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>