当前位置: 首页 > news >正文

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

目录

  • 🌟更多专栏请点击👇
  • 一、前言
  • 二、实现过程
    • 1. 创建一个ThreadLocal对象
    • 2. 初始化SqlSessionFactory
    • 3. 获取并存储sqlSession对象
    • 4. 关闭sqlSession对象
  • 三、 总代码

🌟更多专栏请点击👇

专栏名字
🔥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 {//创建SqlSessionFactoryInputStream 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。

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

4. 关闭sqlSession对象

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

  //关闭sqlSessionpublic 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 {//创建SqlSessionFactoryInputStream is = null;try {is = Resources.getResourceAsStream("mybatis-cfg.xml");} catch (IOException e) {e.printStackTrace();}sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);}//获取SqlSessionpublic static SqlSession getSqlSession(){SqlSession sqlSession = threadLocal.get();        if(sqlSession == null){sqlSession = sqlSessionFactory.openSession();       threadLocal.set(sqlSession);                       }return sqlSession;}//关闭sqlSessionpublic static void closeSqlSession(){SqlSession sqlSession = threadLocal.get();if (sqlSession != null){            sqlSession.close();threadLocal.set(null);}}
}
http://www.lryc.cn/news/34377.html

相关文章:

  • 【Java】DT怎么写?
  • xcode14安装swift package设置github账户token
  • css面试题1
  • Hive基础
  • 信息收集-
  • 【sdx12】sdx12获取Serial Number操作方法及源码分享Serial Number的寄存器地址
  • 23种设计模式-工厂模式(安卓应用场景介绍)
  • sheng的学习笔记-服务熔断与降级组件Hystrix
  • 简单给WordPress怎么添加自定义字段面板
  • 大数据框架之Hive:第6章 查询
  • CentOS 8搭建EMQX集群
  • 基于神经网络的自监督学习方法音频分离器(Matlab代码实现)
  • yocto 如何添加python module
  • [深入理解SSD系列综述 2.1.2] SLC、MLC、TLC、QLC、PLC NAND_固态硬盘闪存颗粒类型
  • Matlab实现FFT变换
  • JVM调优面试题——垃圾回收专题
  • java启动命令中-D和--的区别
  • QML Popup详解
  • [2.1.6]进程管理——线程的实现方式和多线程模型
  • 小白做什么兼职项目赚钱?宝妈拍短视频赚钱的方法
  • 第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解
  • Linux中断操作
  • 看看CabloyJS是如何异步加载并执行go wasm模块的
  • 嵌入式C语言九大数据结构操作方式详解
  • 【C++学习】栈 | 队列 | 优先级队列 | 反向迭代器
  • Python—看我分析下已经退市的 可转债 都有什么特点
  • 【第八课】空间数据基础与处理——数据结构转化
  • MATLAB绘制三Y轴坐标图:补充坐标轴及字体设置
  • springboot项目中Quartz
  • Presto本地开发,plugin的设置