mybaits中懒加载一级缓存二级缓存

https://www.cnblogs.com/ysocean/p/7342498.html#_label1 优秀的文章

一、懒加载

懒加载是按需加载,是指在多表关联中,一个对象中会关联另一个对象,那么有需求是有时候会查询到这个对象,而有时候不会查询到那个对象,如果不进行懒加载,那么就会进行多表关联查询,如果按需加载,那么需要到触发到查询那个对象的时候,就会再执行一步加载。

json转换的话默认是会触发懒加载的。

二、一级二级缓存

缓存是可以提供查询的效率的,一级缓存是针对与单个sqlsession,是不可控的,sqlsession是会关闭的。二级缓存是mapper(同一个namespace)对象,全部是基于hashMap进行本地存储,insert update 等等会进行刷新缓存,使用lru算法。

三、细节

一级缓存中,如果第一次查询出对象,然后改变对象的值(不是update) ,然后再查询,那么查询是经过一级缓存的,但是值却不是数据库的,因为本地更改了。

二级缓存中,在多表查询的时候,因为涉及到多个对象,多个namespace。那么就触发查询缓存,但是如果其中update,那么还是会再次查询,因为不是同一个namespace

 

posted @ 2019-11-25 18:14  逆水不进则退  阅读(125)  评论(0)    收藏  举报