MybatisSqlSessionFactory工具类

上一篇文章剩下的MyBatis的核心接口是SqlSession。它的方法有:

1
2
3
4
5
6
7
8
9
10
1.数据更新
insert() update() delete()
2.数据查询
selectOne() selectList() selectMap()
3.事务处理
commit() rollback()
4.Mapper接口使用
getMapper()
5.管理操作
close() clearCache()

一般我们运用MyBatis框的时候,都会编写一个工具来获取SqlSession,并且我们可以将SqlSession和线程绑定,这样我们可以达到节省资源的目的。
要获取SqlSession我们需要用SqlSessionFacotry的openSqlSession()方法,得到SqlSessionFactory我们要用到SqlSessionFactoryBulider的build()方法。并且我们的工具类需要两个核心方法,一个获得SqlSession,一个关闭资源。下面代码已经做详细注释,有不懂的地方可以在留言板块留言,作者会及时回复!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
* 获取SqlSession工具类
* @author haozai
* @date 2018年12月6日 上午9:39:56
*/
public class MybatisSqlSessionFactory {

//通过工厂类得到SqlSession
private static SqlSessionFactory factory;
//用于sqlSession和线程绑定
private static ThreadLocal<SqlSession> tl = new ThreadLocal<>();

static {
//因为我们的工厂类一般只需要得到一次就够了,所以我们将得到工厂类的代码放在静态代码块中
buildSqlSessionFactory();
}

protected MybatisSqlSessionFactory() {

}

private static void buildSqlSessionFactory() {
try {
//build我们的mybatisconfig.xml配置文件
factory = new SqlSessionFactoryBuilder().
build(Resources.getResourceAsReader("mybatisconfig.xml"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取SqlSession的实例 默认自动提交事务
* @return SqlSession对象
*/
public static SqlSession getSqlSession() {
SqlSession ss = tl.get();
if(ss == null) {
if(factory == null) {
//如果工厂丢失 则再创建一个
buildSqlSessionFactory();
}
ss = factory.openSession(true);
tl.set(ss);
}
return ss;
}
/**
* 获取SqlSession的实例 自己设定是否自动提交事务
* @param falg:是否自动提交事务 false:否 true:是
* @return SqlSession对象
*/
public static SqlSession getSqlSession(boolean flag) {
SqlSession ss = tl.get();
if(ss == null) {
if(factory == null) {
//如果工厂丢失 则再创建一个
buildSqlSessionFactory();
}
ss = factory.openSession(flag);
tl.set(ss);
}
return ss;
}

/**
* SqlSession的资源释放
*/
public static void closeSqlSession() {
SqlSession ss = tl.get();
if(ss != null) {
tl.remove();
ss.close();
}
}
}

-------------本文结束感谢您的阅读-------------