SqlSessionFactory工具类抽取
在写Servlet的时候,因为需要使用MyBatis来完成数据库的操作,所以对于MyBatis的基本操作就出现了一些重复的代码,如下:
获取sqlSessionFactory对象
String resource = “mybatis-config.xml”;
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
获取sqlsession对象
SqlSession sqlSession = build.openSession();
获取mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
过多的重复代码会给后期造成一个影响:
- 重复代码不利于后期的维护
- SQLSessionFactory工厂类进行重复创建
如何优化:
- 将重复代码抽取成工具类
- 对指定代码只需要执行一次可以使用静态代码块
代码如下:
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//静态代码块会随着类的加载而自动执行,且只执行一次
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
工具类抽取以后,以后在对Mybatis的SqlSession进行操作的时候,就可以直接使用
SqlSessionFactory sqlSessionFactory =SqlSessionFactoryUtils.getSqlSessionFactory();
这样就可以很好的解决上面所说的代码重复和重复创建工厂导致性能低的问题了。