Mybatis核心类生命周期和管理

Mybatis的核心类及生命周期:

1、SqlSessionFactoryBuilding

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

2、SqlSessionFactory

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

3、sqlsession

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

Mybatis管理:

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();
}
}
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值