博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis知识点总结(一)
阅读量:5302 次
发布时间:2019-06-14

本文共 5855 字,大约阅读时间需要 19 分钟。

前言:本篇主要记录在MyBatis学习过程中的主要知识点。


1.mybatis环境的搭建,通过maven可以快速的进行环境的搭建。

1 
2
3
3.4.5
4
4.12
5
5.1.38
6
1.2.17
7
1.7.25
8
1.3.6
9
10 11
12
13
org.mybatis
14
mybatis
15
${mybatis.version}
16
17 18
19
mysql
20
mysql-connector-java
21
${mysql-driver.version}
22
23 24
25
junit
26
junit
27
${junit.version}
28
29 30
31
log4j
32
log4j
33
${log4j.version}
34
35 36
37
org.slf4j
38
slf4j-log4j12
39
${slf4j.version}
40
41 42
43 44
45
46
47
48
src/main/java
49
50
**/*.xml
51
52
true
53
54
55
src/main/resources
56
57
**/*.xml
58
**/*.properties
59
60
61
62
63
64
65
org.mybatis.generator
66
mybatis-generator-maven-plugin
67
${mbg.version}
68
69
70
src/main/resources/mybatis-generator-config.xml
71
true
72
true
73
74
75
76
Generate MyBatis Artifacts
77
78
generate
79
80
81
82
83
84
org.mybatis.generator
85
mybatis-generator-core
86
${mbg.version}
87
88
89
90
91
View Code

2.mybatis核心配置文件

mybatis的核心配置文件,位置与名称都不固定。

需要注意的是mybatis的核心配置文件的标签是有顺序的,如果顺序不对,会产生错误提示,可根据具体提示进行标签位置的调整。

mybatis核心配置文件主要配置如下:

1 
2 5
6
7
11
12 13
14
15
16
17
18
19
20
21 22
23
24
25
27
28
29
32
33
34
35
36
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
View Code

3.关于sql映射文件

由于我们采用mapper接口式的编程,所以sql映射文件与mapper接口类的名称要相同,并且sql映射文件中namespace的值为对应mapper接口的全类名形式。

4.关于mybatis中的参数处理

对于mapper接口中单个参数,mybatis不会做特殊处理。可以通过#{参数名}进行取值操作。

对于mapper接口中的多个参数,mybatis会做特殊处理。多个参数会被mybatis封装成一个map,#{}就是从map中进行取值。

key的形式为:param1、param2......paramN的形式。

value:就是说要传入的值。

但是这种方式的可读性极差,因此可以采用命名参数的形式,通过@Param注解明确指定map中的key值。

如果多个参数正好是业务逻辑的数据模型,则可直接传入POJO,通过#{属性名}进行取值。

特别注意,如果参数为Collection(List,Set)类型或者是数组,mybatis也会特殊处理,mybatis也会把list或者数组封装在map中。

如果参数为Collection则map中的key为Collection(collection)。

如果参数为List,则map中的key可以直接使用list。

如果参数为数组,则map中的key为array。

5.关于mybatis的返回值和实体类字段与数据库字段不一致的问题

当mapper接口中某函数的返回值类型为List时,在其对应sql语句的resultType上直接写List集合的中元素的类型即可。

使用resultMap(自定义结果集映射规则),解决数据库字段和实体类属性不一致的情况。注意:resultMap和resultType只能二选一。

6.mybatis中的缓存机制

mybatis中默认定义了两级缓存,默认情况下一级缓存(本地缓存)开启。

一级缓存:在与数据库同一次会话期间的数据会放到一级缓存中,以后如果需要查询相同的数据,直接从缓存中取,不需要到数据中进行查询。

注意:一级缓存为sqlSession级别的缓存,一直都是开启的,不能关闭。

一级缓存失效的四种情况:

1)sqlSession不同,缓存失效。

2)sqlSession相同,查询条件不同,缓存失效,因为缓存中可能还没有相关数据。

3)sqlSession相同,在两次查询期间,执行了增删改操作,缓存失效。

4)sqlSession相同,但是手动清空了一级缓存,缓存失效。

二级缓存(全局缓存)需要进行配置,二级缓存是基于namespace级别的,一个namespace对应一个二级缓存。

二级缓存工作机制:

1)一个会话,查询一条数据,该数据会放在当前会话的一级缓存中。

2)如果当前会话关闭,对应的一级缓存会被保存到二级缓存中,新的会话查询信息,就可以参照二级缓存。
3)不同namespace查询出的数据会放在自己对应的缓存中。
注意:查出的数据都会默认放在一级缓存中,只有会话提交或关闭后,一级缓存的数据才会被转移到二级缓存中。


by Shawn Chen,2018.3.14日,晚。

转载于:https://www.cnblogs.com/developer_chan/p/8570454.html

你可能感兴趣的文章
iOS7适配之设计篇
查看>>
struts2框架快速入门小案例
查看>>
2018 蓝桥杯省赛 B 组模拟赛(一)
查看>>
Mergeable Stack
查看>>
jsp应用
查看>>
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper]SQL Error: 1064, SQLState: 42000问题的解决办法...
查看>>
LR学习笔记9-回放测试脚本
查看>>
iOS 6.0 GM 版全系列固件下载
查看>>
java构造方法的重载
查看>>
flex布局
查看>>
html 选择图片后马上展示出来
查看>>
Python_if
查看>>
Swift——(两)Swift访问元组
查看>>
Android学习笔记(四十):Preference的使用
查看>>
读完了csapp(中文名:深入理解计算机系统)
查看>>
[剑指offer] 11. 二进制中1的个数
查看>>
android获得屏幕高度和宽度(display中getSize(Point)方法使用)
查看>>
部分GTX系列显卡,在DirectX9下正常,DirectX10与DirectX11下经常蓝屏黑屏死机的问题...
查看>>
Js中,Map对象的使用
查看>>
持久层封装 JDBC
查看>>