免费商城建站,视频网站怎么赚钱,仿煎蛋wordpress,建设厅网站密码忘了怎么办目录#x1f31f;更多专栏请点击#x1f447;一、前言二、实现过程1. 创建一个ThreadLocal对象2. 初始化SqlSessionFactory3. 获取并存储sqlSession对象4. 关闭sqlSession对象三、 总代码#x1f31f;更多专栏请点击#x1f447;
专栏名字#x1f525;Elasticsearch专栏e…
目录更多专栏请点击一、前言二、实现过程1. 创建一个ThreadLocal对象2. 初始化SqlSessionFactory3. 获取并存储sqlSession对象4. 关闭sqlSession对象三、 总代码更多专栏请点击
专栏名字Elasticsearch专栏esspring专栏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 ThreadLocalSqlSession 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 ThreadLocalSqlSession 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);}}
}