第四篇 封装SqlSessionFactory

由于我们每写一个操作语句都要新建SqlSessionFactory,大大增加了内存的消耗,长此以往,以后项目中的sql语句越来越多的时候,就会影响性能,且代码十分冗余,这就有悖于Mybatis的初衷,因此,进行第一次优化-------封装SqlSessionFactory,将他封装成一个工具类,想使用的时候直接调用

java 复制代码
public class MybatisUtils {
    static SqlSessionFactory build=null;
    public static SqlSession createSqlSession(){
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        if (build==null){
            SqlSession sqlSession = null;
            try {
                inputStream = Resources.getResourceAsStream(resource);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            build= sqlSessionFactoryBuilder.build(inputStream);
        }
        SqlSession sqlSession = build.openSession(true);
        return sqlSession;
    }
}

但是,这只是解决了代码的冗余并没有减少他的创建次数,依旧是有多少条语句就创建多少个sqlsession对象,还是很浪费资源,这时就可以联想到前面说过的static关键字以及单例模式,无论创建多少个对象,在底层依然还是同一个,现在进行第二次改进:

java 复制代码
public class MybatisUtils {
    static SqlSessionFactory sqlSessionFactory;

    //静态代码块:给静态成员变量赋值,加载类执行,只执行一次
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    public static SqlSession createSqlSession() {
        try {
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            return sqlSession;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}
相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库