您的位置:首页 > 其它

学习笔记 1 ( mybatis 缓存理解 懒加载,一级缓存和二级缓存)

2018-01-24 10:45 671 查看
何为凡人,何为仙,岂闻韶华尽何年,回首沧桑,此恨绵绵,风月如剑,看我破天。道不尽仙凡殊途,尽人间。

1.什么是延迟加载

resultMap中的association和collection标签具有延迟加载的功能。

延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。

设置延迟加载

需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载。

lazyLoadingEnabled、aggressiveLazyLoading
设置项
描述
允许值
默认值
lazyLoadingEnabled
全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。
true | false
false
aggressiveLazyLoading
当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。
true | false
true

2 .什么是一级缓存 什么是二级缓存(

mybatis自定义的分页,只是用到了mybatis中的BoundSql对象进行分页的,mybatis都是假分页,mybatis自动是开启一级缓存的,二级缓存存在的范围是mapperedId,所以当数据一有变化,二级缓存就没有用了,就像分页查询一样,每次查询出来的东西都是不一样,所以用二级缓存是无效的,像二级缓存用的话,只是用到一些统计啊之类的

)

Mybatis的一级缓存是指SqlSession。一级缓存的作用域是一个SqlSession。Mybatis默认开启一级缓存。

在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。

Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。

在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则二级缓存清空。

实现序列化 <实现 mybatis 内置的 cache 机制。>

由于二级缓存的数据不一定都是存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化。

如果该类存在父类,那么父类也要实现序列化。





禁用二级缓存

该statement中设置userCache=false可以禁用当前select语句的二级缓存,即每次查询都是去数据库中查询,默认情况下是true,即该statement使用二级缓存。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: