zoukankan      html  css  js  c++  java
  • MybatisUtil工具类的作用

    1)在静态初始化块中加载mybatis配置文件和StudentMapper.xml文件一次

    2)使用ThreadLocal对象让当前线程与SqlSession对象绑定在一起

    3)获取当前线程中的SqlSession对象,如果没有的话,从SqlSessionFactory对象中获取SqlSession对象

    4)获取当前线程中的SqlSession对象,再将其关闭,释放其占用的资源

    package loaderman;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.sql.Connection;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /**
     * 工具类
     */
    public class MybatisUtil {
        private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
        private static SqlSessionFactory sqlSessionFactory;
        /**
         * 加载位于src/mybatis.xml配置文件
         */
        static{
            try {
                Reader reader = Resources.getResourceAsReader("mybatis.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        /**
         * 禁止外界通过new方法创建
         */
        private MybatisUtil(){}
        /**
         * 获取SqlSession
         */
        public static SqlSession getSqlSession(){
            //从当前线程中获取SqlSession对象
            SqlSession sqlSession = threadLocal.get();
            //如果SqlSession对象为空
            if(sqlSession == null){
                //在SqlSessionFactory非空的情况下,获取SqlSession对象
                sqlSession = sqlSessionFactory.openSession();
                //将SqlSession对象与当前线程绑定在一起
                threadLocal.set(sqlSession);
            }
            //返回SqlSession对象
            return sqlSession;
        }
        /**
         * 关闭SqlSession与当前线程分开
         */
        public static void closeSqlSession(){
            //从当前线程中获取SqlSession对象
            SqlSession sqlSession = threadLocal.get();
            //如果SqlSession对象非空
            if(sqlSession != null){
                //关闭SqlSession对象
                sqlSession.close();
                //分开当前线程与SqlSession对象的关系,目的是让GC尽早回收
                threadLocal.remove();
            }
        }
    
        /**
         * 测试
         */
        public static void main(String[] args) {
            Connection conn = MybatisUtil.getSqlSession().getConnection();
            System.out.println(conn!=null?"连接成功":"连接失败");
        }
    }
  • 相关阅读:
    Attributes(特性)与 Properties(属性)的区别
    MFC Ribbon UI 弹出菜单实现分析
    汇编笔记(三)
    一道“简单”的难题
    汇编笔记(四)
    汇编笔记(二)
    汇编笔记(五)
    在XAML里绑定 ElementName RelativeSource 属性
    WPF combobox 解释RelativeSource
    存储过程事务 用事务点处理回滚实例
  • 原文地址:https://www.cnblogs.com/loaderman/p/10064317.html
Copyright © 2011-2022 走看看