Mybatis(三)——一对一映射、动态 SQL(include、if、where、set、trim、foreach、choose标签)、Cache(一级缓存和二级缓存)、SSM整合
一、一对一映射
1、一对一映射
比如每个班级都对应一个年级:
实体类:
然后是 mapper 文件:
然后测试结果:
2、一对一映射(懒加载)
二、动态 SQL
1、介绍动态 SQL
MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的SQL之后再执行,以达到SQL复用、简化编程的效果。
sql 优化的一个策略是:取什么数据就用什么字段,不要轻易的 select * ,这样会消耗数据库的性能。
databaseID :如果不确定用什么数据库,比如可能是 sql,或者 oracle,那就可以使用这个,不过一般都用不上。
2、include 标签
可以单独定义一个 sql 片段,然后需要用到这个片段的时候就通过 include 来引用这个片段:
3、if 标签
学代码学到这里的不会还不知道 if 代表的是什么意思吧?
接口:
mapper 文件:
还有一种简化的笨办法:
4、where 标签
上图中的办法也不是很好,因为要写多一个判断,所以可以通过 where 标签来完成:
5、set 标签
set 标签是做更新的时候用的。
核心是,用户传了哪些字段,就更新哪些字段,不可能用户只想更新某一个字段,就传了某一个字段,而其他字段都为 null ,这显然不合理。所以有了 set 标签:
6、trim 标签
trim 标签是功能的集大成者,有很多前面标签的功能。
trim 的用法不止上面这些,还有很多。比如有前面或者后面有多余的,不确定要不要加的标签都可以用 trim 标签。
7、foreach 标签
比如传进一组 id,根据这些 id,一个个的查出他们的数据:
接口:
mapper 文件:
测试代码:
另外一个用法,可以用在批量插入中:
8、choose 标签
choose 标签相当于 java 代码中的 switch 的用法:
choose 标签用的很少,if 标签用的更多。
三、Cache(缓存)
1、缓存介绍
2、一级缓存
a、相同 sqlsession
可以通过查看日志 sql 语句执行了几次验证:
可以发现,只执行了一次 sql 语句,所以一级缓存是默认开启的
b、不同 sqlsession
如果 sqlsession 不同的话,是用不了缓存的
可以通过查看日志发现,sql 语句执行了两次。
一级缓存使用的前提是:同一个 sqlsession,
3、二级缓存
一般来说 sqlSessionFactory 只有一个实例,不会变。
二级缓存有点类似于全局缓存。使用到这个的概率很低。
全局缓存开启:
上图中这个东西一般默认开启;要手动开启的在下图(开启也很容易,在 mapper 文件中):
开启了之后,用到的实体类都需要序列化!
总例子:
要缓存也可以通过 commit():
四、SSM整合
Spring + Spring MVC + mybatis 整合。
一步一步来,先配置 Spring + MVC,没问题了再配置 mybatis 。
1、先配 Spring + MVC
pom.xml 文件:
然后是 java 代码文件:
然后是 Spring 配置文件:
Spring MVC 配置文件:
然后是 web.xml 配置文件:
到此为止,一个简单的 Spring + MVC 就算整合完毕,测试也没有问题。
2、配置 mybatis
首先导入依赖:
然后是资源路径:
接着就数据库了:
然后是 mapper 和 model:
最后就是在 Spring 里面整合 mybatis:
然后到此为止,mybatis 在这里面配置这两个,就算完成了。