第一种:

public class JDBCUtils {
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    private static SqlSessionFactory sqlSessionFactory=null;
    static{
        Reader resourceAsReader = null;
        try {
            resourceAsReader = Resources.getResourceAsReader("Configuration.xml");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("读取配置文件异常");
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
        if(resourceAsReader!=null) {
            try {
                resourceAsReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

private JDBCUtils() {
    }

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

/**
     * 产生动态代理的sqlSession对象,修改原来的commit与rollback方法
     * @return
     */
    public static SqlSession getProxySqlsession(){
        final SqlSession sqlSession = getSqlSession();
        SqlSession proxySqlSession = (SqlSession)Proxy.newProxyInstance(sqlSession.getClass().getClassLoader(), new Class[]{SqlSession.class}, new InvocationHandler() {
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if(method.getName().equals("commit")){
                    Object invoke = method.invoke(sqlSession, args);
                    close(sqlSession);
                    return invoke;
                }
                else if(method.getName().equals("rollback")){
                    Object invoke = method.invoke(sqlSession, args);
                    close(sqlSession);
                    return invoke;
                }
                else if(method.getName().equals("close")){
                    close(sqlSession);
                    return null;
                }
                else{
                    return method.invoke(sqlSession,args);
                }
            }
        });
        return proxySqlSession;
    }

public static void close(SqlSession sqlSession) {
        if(sqlSession!=null) {
            sqlSession.close();
            threadLocal.remove();
            if(threadLocal!=null){
                threadLocal.set(null);
            }
        }
    }
}

第二种:
import java.io.*; 
import org.apache.ibatis.io.Resources; 
import org.apache.ibatis.session.*; 
public class MyBatisSqlSessionFactory{ 
   private static  SqlSessionFactory sqlSessionFactory; 
   public static SqlSessionFactory getSqlSessionFactory(){ 
        if(sqlSessionFactory == null){ 
            InputStream inputStream; 
            try{ 
                inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
            }catch (IOException e){ 
                throw newRuntimeException(e.getCause()); 
            } 
        } 
        return sqlSessionFactory; 
    } 
   public static SqlSession openSession(){ 
       return getSqlSessionFactory().openSession(); 
    }

MyBatis--工具类模板相关推荐

  1. 后端常用数据持久层模板及框架以及一些工具类模板的配置使用集合

    文章目录 后端常用数据持久层模板及框架以及一些工具类模板的配置使用集合 JDBC.c3p0.hibernate配置模板:JDBC模板方法模式.抽象工厂模式封装模板:Spring+hibernate+c ...

  2. mysql mybatis 工具类_我肝了一个星期,为你们整理出了mybatis程序配置教程

    1.搭建实验数据库 我们创建一个mybatis实验数据库,并创建一个user表为后续实验准备 2.IDEA新建项目,连接数据库 新建一个普通的maven项目 删除src目录,作为父工程 pom.xml ...

  3. 可执行SQL文的mybatis工具类

    1.创建工具类  import org.apache.ibatis.builder.StaticSqlSource; import org.apache.ibatis.exceptions.TooMa ...

  4. mybatis工具类

    一.            MybatisUtil 封装工具 类 方法 基础功能 运行效率 优化 1.读取配置文件需要打开IO 建议只读取一次即可 2.SqlSessionFactry 工厂对象 重量 ...

  5. 009-MailUtils工具类模板

    版本一:JavaMail的一个工具类 package ${enclosing_package};import java.security.GeneralSecurityException; impor ...

  6. 自动生成代码工具 模板工具类

    自动生成代码工具 模板工具类 import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.Output ...

  7. 二、MyBatis常用对象分析 封装工具类

    1.0 MyBatis 对象分析 (1) Resources 类 Resources 类,顾名思义就是资源,用于读取资源文件.其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象. (2) ...

  8. SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)

    创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...

  9. 【开发随机】JAVA+POI+自定义注解+反射构建自定义工具类实现快捷简便的Excel模板化导出(附demo代码)

    220907更新 项目UAT期间,用户反映了一个问题,数据量稍大的情况下,会出现"从某一行开始,往下所有行设置的字体和字体大小不生效"的BUG. 经过排查,发现原因是:POI的XS ...

  10. 发送邮件功能:使用Spring Email、邮件工具类、使用Thymeleaf模板引擎 发送html邮件

    发送邮件 Spring Email 开启自己邮箱的POP3/SMTP服务 导入spring mail 依赖 <!-- https://mvnrepository.com/artifact/org ...

最新文章

  1. GoWeb开发_Iris框架讲解(三):路由功能处理方式
  2. Java设计模式10:观察者模式
  3. You are what you say!
  4. 【嵌入式】C语言中volatile关键字
  5. figma下载_在Figma上进行原型制作的各种触发选项
  6. 浮点高精求和(洛谷P2393题题解,弃坑Java拥抱C++)
  7. leetcode力扣36.有效的数独
  8. html设置referer防盗链,referer与防盗链
  9. awk 输出到多个文件 多路输出
  10. Node.js与V8引擎
  11. 节约里程法matlab程序_物流配送路径优化研究 毕业论文.doc
  12. 小学数学应用题:经典题型归纳50题含解析
  13. SUSE收购Rancher Labs,云原生时代大幕拉开
  14. SpringMvc从入门到入魔
  15. 读书感受 之 《如何说客户才会听,怎么听客户才肯说》
  16. VideoMAE 论文阅读
  17. 谁将成为中国版底特律?
  18. p-sum结构解释+代码 二叉区间树
  19. 苹果计算机如何出现关机界面,电脑关机.教您苹果电脑怎么关机
  20. fiddler抓包 - Android 虚拟机

热门文章

  1. 迈足狂奔!铁塔公司:目前北京已建好4400多座大型5G基站
  2. 马斯克公开特斯拉Model 3成本 价值这个数...
  3. 山东酒桌上的称谓座次以及基本礼仪
  4. 遥远的救世主:电视剧《天道》
  5. python模式匹配算法_【python算法书】单词模式匹配?
  6. 示波器纹波测试的时间设置_500W电源横评:输出纹波3款电源超标
  7. 【Flink】未解决 FLink 写 hive MemoryManager New Memory allocation smaller than the minimum allocation size
  8. 【Elasticsearch】十九种Elasticsearch字符串搜索方式终极介绍 各种 查询
  9. 80-450-020-原理-索引-索引失效与优化
  10. 【ElasticSearch】Es 启动流程 初始化流程 源码分析