Mybatis 工具类的封装

本文详细介绍了MyBatis工具类的封装方法,包括如何使用Resources读取配置文件,创建线程安全的SqlSessionFactory,以及如何通过SqlSession实现事务控制。通过ThreadLocal绑定SqlSession,确保线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工具类的封装首先要考虑的问题是,要实现所有的功能。为了以后的扩展需要工具具有容易维护的特点。同时要提高效率。

mybatis 工具类的封装要考虑三大块内容Resources、SqlSessionFactory、SqlSession。

  • Resources:Resources 的作用是读取 Mybatis 核心配置文件,读取的方式是使用IO 流,这样的方式只执行一次就可以了。
  • SqlSessionFactory : SqlSessionFactory 是 SqlSession的工厂。这个是重量级资源,内存占用比较大。是一个线程安全的。
  • SqlSession : 作用是翻译接口的实现类代码,代替了 JDBC 中的 Connection 对象,需要控制事务。是一个线程不安全的,需要进行线程绑定 ThreadLocal 绑定。
package com.sixkery.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

// mybatis 工具类的封装
public class MybatisUtil {
	private static SqlSessionFactory build = null;
	private static ThreadLocal<SqlSession> t = new ThreadLocal<>();
	// Resources 读取配置文件,读一次,封装静态代码块里
	// SqlSessionFactory SqlSession 的工厂,线程安全,创建一次
	static {
		// Resources 读取 Mybatis 框架运行参数 , Mybatis
		try {
			InputStream is = Resources
					.getResourceAsStream("mybatis-config.xml");
			// 创建 SqlSessionFacoty 对象, 工厂类型资源
			build = new SqlSessionFactoryBuilder().build(is);
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("没找到文件!");
		}
	}
	// 获取 SqlSession 对象
	private static SqlSession openSession() {
		// 如果线程中没有 SqlSession 对象,就创建一个
		SqlSession ss = t.get();
		if (ss == null) {
			ss = build.openSession();
			t.set(ss); // 把 SqlSession 放到线程中去
		}
		return ss;
	}
	// 获取 DAO 接口的实现类
	public static Object getMapper(Class clazz) {
		return openSession().getMapper(clazz);
	}
	// 控制事务,提交
	public static void commit() {
		openSession().commit();
		close();
	}
	// 控制事务,回滚
	public static void rollback() {
		openSession().rollback();
		close();
	}
	// 关闭资源
	public static void close() {
		openSession().close();
		t.remove(); // 移除线程绑定
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值