第四篇 封装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);
        }
    }
}
相关推荐
一定要AK3 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao3 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao4 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
凯尔萨厮4 小时前
创建SpringWeb项目(Spring2.0)
spring·mvc·mybatis
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
阿里小阿希4 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神4 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle