• Mybatis核心类生命周期和管理


    Mybatis核心类生命周期和管理

    原文链接:https://blog.csdn.net/qq1134550437/article/details/51960480

    1、SqlSessionFactoryBuilding

      这个类可以被实例化、使用和丢弃。一但创建了SqlSessionFactory后,这个类就不需要存在 了,因此sqlsessionfactorybuilder 实例的最佳作用域是方法范围(即作为方法的变量)

    2、SqlSessionFactory

      SqlSessionFactory,顾名思义就是获取SqlSession对象的工厂,功能类似于jdbc中加载数据库驱动。所以sqlsessionfactory对象一但被创建,应该在应用执行期间都存在,因此sqlsessionfactory的最佳作用域是应用范围,建议定义为静态变量。

    3、sqlsession

      sqlsession类似于jdbc的connection对象,每个线程都因该有自己的sqlsession 实例。sqlsesion的实例,sqlsession的实例不能共享,他是 线程不安全的,因此最佳作用域是请求或方法范围,sqlsession对象能够执行数据库的增删改查操作,因此在使用后应该关闭,并保存使用finally快来关闭。

    package util;
    
    import java.io.IOException;
    import java.io.Reader;
    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 MyBatisUtil() {
        }
    
        private static final String RESOURCE = "config.xml";
        private static SqlSessionFactory sqlSessionFactory = null;
        private static ThreadLocal<SqlSession> threadlocal = new ThreadLocal<SqlSession>();
        static {
            Reader reader = null;
            try {
                reader = Resources.getResourceAsReader(RESOURCE);// 读取映射文件
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                sqlSessionFactory = builder.build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                throw new ExceptionInInitializerError("初始化MyBatis错误");
            }
    
        }
    
        public static SqlSessionFactory getSqlSessionFactory() {
    
            return sqlSessionFactory;
        }
    
        public static SqlSession getSession() {
    
            SqlSession session = threadlocal.get();
    
            // 如果session为null,则打开一个新的session
    
            if (session == null) {
                session = (sqlSessionFactory != null) ? sqlSessionFactory
                        .openSession() : null;
                threadlocal.set(session);
            }
            return session;
        }
    
        public static void closeSession() {
    
            SqlSession session = (SqlSession) threadlocal.get();
            threadlocal.set(null);
            if (session != null) {
                session.close();
            }
        }
    }
  • 相关阅读:
    JavaScript根据CSS的Media Queries来判断浏览设备的方法
    JavaScript API 设计原则
    高性能 CSS3 动画
    CSS代码实例:用CSS代码写出的各种形状图形
    frontpage 2010.2003绿色版
    Web前端年后跳槽必看的各种面试题
    [ksm][数学] Jzoj P5810 简单的玄学
    [分治] Jzoj P5807 简单的区间
    [dfs][bfs] Jzoj P5806 简单的操作
    [dp] Jzoj P5804 简单的序列
  • 原文地址:https://www.cnblogs.com/doudou-taste/p/9042034.html
Copyright © 2020-2023  润新知