【Mybatis】| 如何创建MyBatis的工具类

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 【Mybatis】| 如何创建MyBatis的工具类,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

🌟更多专栏请点击👇

专栏 名字
🔥Elasticsearch专栏 es
🔥spring专栏 spring开发
redis专栏 redis学习笔记
🔥项目专栏 项目集锦
修bug专栏 bug修理厂

一、前言

使用MyBatis框架在持久层操作中,如果多个DML操作都属于一个事务,因为commit()和rollback()都是SqlSession完成的,所以必须保证只使用一个SqlSession,但是不同的DML操作可能在不同类的不同方法中,每个方法都需要获取SqlSession,所以应该如何在多个DML操作中保证使用同一个SqlSession呢?
在这里插入图片描述

二、实现过程

1. 创建一个ThreadLocal对象

下面给大家带来了一个工具类:ThreadLocal,它可以储存SqlSession对象,并且保证一个线程只使用一个SqlSession。现在来学习一下如何创建MyBatis这个工具类

首先需要new一个ThreadLocal对象,以便存储SqlSession:

 private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<>();

2. 初始化SqlSessionFactory

在一个静态代码块中初始化SqlSessionFactory:

 static {
        //创建SqlSessionFactory
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream("mybatis-cfg.xml");

        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

    }

3. 获取并存储sqlSession对象

接下来就是从ThreadLocal中获取sqlSession对象,并且使用ThreadLocal存储该对象:

tips:存储SqlSession的时候要判断该对象是否为空,要是为空就要获取一个,然后再存到ThreadLocal,返回一个SqlSession。

//获取SqlSession
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = threadLocal.get(); 
        
        if(sqlSession == null){
            sqlSession = sqlSessionFactory.openSession();     
            threadLocal.set(sqlSession);                        
        }

        return sqlSession;
    }

4. 关闭sqlSession对象

接下来也可以在该工具类写关闭sqlSession方法

  //关闭sqlSession
    public static void closeSqlSession(){
        SqlSession sqlSession = threadLocal.get();
        if (sqlSession != null){           
            sqlSession.close();
            threadLocal.set(null);
        }
    }

三、 总代码

public class MyBatisUtils {
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<>();
    private static SqlSessionFactory    sqlSessionFactory = null;
    static {
        //创建SqlSessionFactory
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream("mybatis-cfg.xml");

        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

    }
    //获取SqlSession
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = threadLocal.get();        
        if(sqlSession == null){
            sqlSession = sqlSessionFactory.openSession();       
            threadLocal.set(sqlSession);                       
        }
        return sqlSession;
    }

    //关闭sqlSession
    public static void closeSqlSession(){
        SqlSession sqlSession = threadLocal.get();
        if (sqlSession != null){            
            sqlSession.close();
            threadLocal.set(null);
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143150.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!