学习笔记 1 ( mybatis 缓存理解 懒加载,一级缓存和二级缓存)
2018-01-24 10:45
671 查看
何为凡人,何为仙,岂闻韶华尽何年,回首沧桑,此恨绵绵,风月如剑,看我破天。道不尽仙凡殊途,尽人间。
1.什么是延迟加载
resultMap中的association和collection标签具有延迟加载的功能。
延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。
设置延迟加载
需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载。
lazyLoadingEnabled、aggressiveLazyLoading
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使用二级缓存。
1.什么是延迟加载
resultMap中的association和collection标签具有延迟加载的功能。
延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。
设置延迟加载
需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载。
lazyLoadingEnabled、aggressiveLazyLoading
设置项 | 描述 | 允许值 | 默认值 |
lazyLoadingEnabled | 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。 | true | false | false |
aggressiveLazyLoading | 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 | true | false | true |
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使用二级缓存。
相关文章推荐
- Mybatis学习笔记-一级缓存与二级缓存
- Mybatis学习笔记-一级缓存与二级缓存
- Mybatis的一级缓存和二级缓存的理解和区别
- Mybatis (七)延迟加载\一级缓存\二级缓存
- JavaWeb学习笔记-mybatis-24-查询缓存(二级缓存)
- myBatis学习笔记(8)—— 一级缓存&二级缓存
- mybatis学习教程中级(九)mybatis一级缓存、二级缓存(重点)
- mybatis的延迟加载,一级缓存,二级缓存
- MyBatis的一级缓存和二级缓存简介笔记
- MyBatis 延迟加载,一级缓存,二级缓存设置
- MyBatis原理-延迟加载,一级缓存,二级缓存设置
- 深入理解MyBatis中的一级缓存与二级缓存
- Mybatis学习笔记-二级缓存
- MyBatis 延迟加载,一级缓存,二级缓存设置
- MyBatis 延迟加载,一级缓存,二级缓存设置
- MyBatis 延迟加载、一级缓存、二级缓存(详解)
- mybatis的延迟加载、一级缓存、二级缓存
- MyBatis 延迟加载,一级缓存,二级缓存设置
- MyBatis学习——一级缓存与二级缓存
- mybatis(八) mybatis查询缓存 延迟加载 一级缓存和二级缓存原理 mybatis整合ehcache