mybatis学习总结-高级知识
1、关联查询1(一对多):<association>标签,属于resultMap的字标签
1. 示例:

+ 注1:也可以使用resultType进行实现,且相对简单。为了遵守开发规范,要求提供的pojo包装类的属性名与查询结果的列名一致。
+ 注2:resultMap可以实现延迟加载,可以满足一些特定场景的要求。
2. 集合内部类型的指定:指的是被返回对象内置集合需要的类型,<collection>标签
》属性:ofType
示例:

+ 注:可以使用extend属性继承已经存在resultMap
示例:

2、关联查询2(多对多):<association>与<collection>的有序嵌套。
3、高级映射——延迟加载
->原理:根据因果关系进行分段查询(后一次的查询需要前一次的结果作为查询条件),在mybatis中延迟加载部分的触发条件为代码段请求到了该部分数据。
->使用<association>select属性指定延迟加载的statement语句。
示例:

原理:先单表查询,触发条件后再根据第一次的查询结果查询另外的表。column=“xxxx”是进行懒加载时的查询条件。这里的单表可能描述不是很准确(需要进行验证)
解释:调用接口方法时,开始只进行单表查询,只有触发相应的条件,才会开始延迟加载。
+ 补充:SqlMapConfig.xmlp配置,mybatis默认关闭了懒加载,需要使用<settings>进行配置。
示例及解释:

4、查询缓存:
》解释:

解释:
-> 一级缓存工作原理:第一次查询某结果,先搜寻缓存中是否存在,不存在则从数据库中查询;当第二次使用相同的的查询语句时,则可直接从缓存中获取数据。如果在第二次查询之前进行了commit操作,则会清空缓存。目的是为了避免脏读。一级缓存默认开启。
->二级缓存工作原理:一级缓存的延展,跨SqlSession共享一个mapper。以namepace为界限对mapper共享缓存进行区分。同样在执行了commit操作之后,会清空二级缓存,避免脏读。
* 开启二级缓存:需要在SqlMapperConfig.xml和mapper.xml中分别开启二级缓存
》SqlMapConfigxml开启二级缓存:

》mapper.xml中开启二级缓存:

》可能会被缓存的对象的类需要实现序列化接口(Serializable)。
+补充:可以在statement语句上禁用二级缓存。

+补充:执行操作之后在statement语句知乎刷新缓存

+补充:mybatis详解:https://www.w3cschool.cn/mybatis/
5、mybatis与ehcache进行整合
1. ehcache:一个分布式缓存框架
2. 整合原理:
3. mybatis与ehcache的整合:
》cache接口:

+补充:与其他的分布式缓存框架整合同理(如redis等)。
》在mapper.xml中配置:

》 需要加入的jar包:
* ehcache自身的jar:
* 整合的jar:
》在classpath下建立ehcache.xml

6、二级缓存的应用场景:对数据实时性要求不高,且访问量大。
1. 性能优化:实际应用中,设置刷新间隔时间
2. 局限性:对细粒度事件的缓存实现不好。

浙公网安备 33010602011771号