第四篇 封装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);
        }
    }
}
相关推荐
知行合一。。。2 小时前
RAG--03--Milvus基本用法
数据库·oracle·milvus
2601_962071572 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
TDengine (老段)2 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
zww89491113 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
上学的小垃圾3 小时前
01-数据库系统概述
数据库
二进制漫游记4 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
2501_928996224 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
zww89491116 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
泡干脆面就番茄6 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
黑马程序员毕设7 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设