MyBatis工具类的创建
前言
很多东西基本学了不用,过不了多久就忘了,所以每个知识点都可以记录,此次只是记录的MyBatis工具类的创建,没有准备jar包的引用和全局配置文件和映射文件的配置。
一、MyBatis是什么?
MyBatis是一款半自动的数据库持久框架,而我们可以用工具类简化它的操作。
二、操作步骤
1.ThreadLocal 介绍
ThreadLocal 提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的 变量是对应的互相独立的。通过 get 和 set 方法就可以得到当前线程对应的值。
2.使用 ThreadLocal 存储 SqlSession
如果多个 DML 操作属于一个事务,因为 commit()和 rollback()都是由 SqlSession 完成的, 所以必须保证使用一个 SqlSession。但是多个不同的 DML 操作可能在不同类的不同方法中, 每个方法中要单独的获取 SqlSession。比如商城下订单时,其实涉及商品库存变化、订单添 加、订单明细添加、付款、日志添加等多个 DML 操作,分布在不同类中。 如何在多个 DML 操作之间使用同一个 SqlSession 呢,可以使用 ThreadLocal 来存储。保 证一个线程中的操作使用的都是一个 SqlSession。
2.创建工具类包和MybatisUtil类
下面展示一些 代码片段
。
点击查看代码
package com.bjsxt.utils;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
/**
* 在这里封装 sqlSession的获取,放入threadLocal中
*/
public class MyBatisUtil {
/*
日志
全局配置文件名称
获取配置文件的资源流
sqlSessionFactory 对象
创建threadLocal 存储sqlsession对象
*/
private final static Logger log = LoggerFactory.getLogger(MyBatisUtil.class);
private final static String cfg = "mybatis-cfg.xml";
static InputStream is = null;
static SqlSessionFactory ssf = null;
static ThreadLocal<SqlSession> tl = new ThreadLocal();
static {
try {
is = Resources.getResourceAsStream(cfg);
ssf = new SqlSessionFactoryBuilder().build(is);
}catch (Exception e) {
log.debug("MybatisUtil",e);
}
}
/**
* 获取 ss 对象
* @return
*/
public static SqlSession getSqlSession() {
SqlSession ss = tl.get();
if (ss == null) {
ss = ssf.openSession();
tl.set(ss);
}
return ss;
}
}
总结
本文主要讲了创建MyBatis工具类通过ThreadLocal 来管理获取SqlSession对象,对数据进行操作。