mybatis-封装工具类SqlSessionUtil,使用动态代理封装事务调用处理器

mybatis-sqlSession工具类,事务处理器的实现

1.作用域(Scope)和生命周期

理解不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。

依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。

1.1SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了sqlSessionFactory,我们就不在需要它了

1.2SqlSessionFactory

一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例,因此我们可以将它写在静态方法中,初始化实例对象,只初始化一次

1.3SqlSession

每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是安全的,因此不能被共享,所以它最佳的作用域应该是一次请求或者是方法作用域

2.sqlSession工具类的实现

2.1实现思路

思路:

  1. 在类加载的时候,我们初始化sqlSessionFactory对象

  2. 获取当前线程中的sqlSession对象,当我们第一次获取时一定为空,这时我们进行为空判断,创建sqlSession对象,并绑定到当前线程中

  3. 释放资源的方法,解除sqlSession与当前线程的绑定关系

    重要:tomcat自带线程池,并发量不高时,新的请求进入,会自动分配一个全新的线程。在高并发的情况下,用过的t1线程,下一个请求进入时,很有可能会使用这个线程,这时进行步骤2必然会获取到有sqlSession的线程,所以我们这里要进行解绑也就是调用remove()方法

  4. 回滚事务的方法

2.2具体实现
package com.yth.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
/**
 * SqlSession工具类
 * @author yth
 * @date 2020/10/14 - 8:08
 */
public class SqlSessionUtils {
   
    //工具类的构造方法都是一般都是私有化的,因为工具类的使用不需要实例化
    private SqlSessionUtils(){
   
    }

    private static SqlSessionFactory sqlSessionFactory;

    private static ThreadLocal<SqlSession>
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值