首页 > 其他 > 详细

Mybatis_11_Mybatis核心对象的生命周期和创建一个Mybatis工具类

时间:2021-04-29 10:16:58      阅读:25      评论:0      收藏:0      [点我收藏+]

Mybatis核心对象的生命周期

  • SqlSessionFactoryBuilder

     - 该类可以被实例化,使用和丢弃,一旦创建了SqlSessionFactory对象,那么就不再需要SqlSessionFactoryBuilder了
    
  • SqlSessionFactory

     - 该类一旦被实例化,就应该在程序运行期间一直存在,没有任何理由对它进行清除或者重建,使用静态代码块进行创建。
    
     - 对于一个应用来说,整个web容器中只有一个SqlSessionFactory对象化该对象只能创建一次,应该在类加载的时候创建。
    
  • SqlSession

    - 每个线程都应该有自己的SqlSession对象,SqlSession不是线程安全的,因此不能被共享,所以它最佳的作用域是请求或方法作用域。
    
    - 一个线程一个Connection,一个线程一个sqlSession
    
  • 怎么保证把Connection 和 SqlSession对象放在ThreadLocal中?

    - 创建一个ThreadLocal,然后使用ThreadLocal的set()方法将 SqlSession对象放到ThreadLocal中,然后使用get()方法获取
    
        private  static ThreadLocal<SqlSession> local = new ThreadLocal<>();
    
  • 创建一个Mybatisutil工具类 代码:

    
        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;
    
    
        public class MybatisUtil {
    
            //工具类的构造方法一般都是私有化的,因为工具类的使用不需要实例化,用类名.就可以引用
            private MybatisUtil(){}
    
            private  static ThreadLocal<SqlSession> local = new ThreadLocal<>();
            private static SqlSessionFactory sqlSessionFactory;
    
    
    
            /**
             * 在类加载的时候初始化SqlSessionFactory对象,只初始化一次。
             */
            static {
                try {
                    sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Mybatis-config"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    
    
            /**
             * 获取当前线程中的SqlSession对象
             * @return
             */
    
            public static SqlSession getCurrentSqlSession(){
                SqlSession sqlSession=local.get();
                if (sqlSession==null){
                 sqlSession=sqlSessionFactory.openSession();
                 local.set(sqlSession); // 将SqlSession对象和线程T1进行绑定
                }
               return  sqlSession;
            }
    
    
            /**
             * 回滚事务
             * @param sqlSession
             */
            public static void rollback(SqlSession sqlSession){
                if(sqlSession!=null) {
                    sqlSession.rollback();
                }
    
            }
    
            /**
             * 关闭当前SqlSession,释放资源
             * @param sqlSession
             */
            public static void close(SqlSession sqlSession){
                if(sqlSession!=null){
                    sqlSession.close();
                    local.remove(); //Tomcat服务器自带线程池,用过的线程t1,下一次可能还会使用t1,所以这里相当于解绑。
                }
    
            }
        }

Mybatis_11_Mybatis核心对象的生命周期和创建一个Mybatis工具类

原文:https://www.cnblogs.com/szqengr/p/14715959.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!