枚举实现SqlSessionFactory单例实现

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,因此 SqlSessionFactory 的最佳作用域是应用作用域。最简单的就是使用单例模式或者静态单例模式。

以下是用枚举实现单例的代码:

package com.mybatisTest.db;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

/**
 * 实现单例的SqlSessionFactory
 */
public enum SqlSessionFactorySingleton {
    GETSQLSESSIONFACTORY("mybatis-config/Configuration.xml");
    private SqlSessionFactory sqlSeeionFactory;
    private String xmlPath;
    SqlSessionFactorySingleton(String xmlPath){
        this.xmlPath=xmlPath;
    }
    public SqlSessionFactory getSqlSeeionFactory(){
        if(sqlSeeionFactory==null){
            sqlSeeionFactory= new GetSqlSeeionFactory(xmlPath).getSqlSessionFactory();
            return sqlSeeionFactory;
        }else {
            return sqlSeeionFactory;
        }
    }
   private class GetSqlSeeionFactory{
        private String xmlPath;
        public GetSqlSeeionFactory(String xmlPath){
          this.xmlPath=xmlPath;
        }
        public SqlSessionFactory getSqlSessionFactory(){
            try {
                //通过配置文件获取数据库连接信息
                Reader resourceAsReader = Resources.getResourceAsReader(xmlPath);
                System.out.println("枚举单例创建SqlSessionFactory");
                //通过配置信息构建一个SqlSessionFactory
                return new SqlSessionFactoryBuilder().build(resourceAsReader);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}
调用端:
SqlSessionFactory sqlSessionFactory= SqlSessionFactorySingleton.GETSQLSESSIONFACTORY.getSqlSeeionFactory();

备注:

需要引入mybatis的jar包或在pom.xml文件引入

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值