Mybatis【逆向工程,缓存,代理】知识要点

将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。

这里写图片描述

mybatis提供一级缓存和二级缓存

这里写图片描述

mybatis一级缓存是一个SqlSession级别,sqlsession只能访问自己的一级缓存的数据

二级缓存是跨sqlSession,是mapper级别的缓存,对于mapper级别的缓存不同的sqlsession是可以共享的。

看完上面对Mybatis的缓存的解释,我们发现Mybatis的缓存和Hibernate的缓存是极为相似的..

Mybatis一级缓存

Mybatis的一级缓存原理

这里写图片描述

第一次发出一个查询sql,sql查询结果写入sqlsession的一级缓存中,缓存使用的数据结构是一个map

key:hashcode+sql+sql输入参数+输出参数(sql的唯一标识)

value:用户信息

同一个sqlsession再次发出相同的sql,就从缓存中取不走数据库。如果两次中间出现commit操作(修改、添加、删除),本sqlsession中的一级缓存区域全部清空,下次再去缓存中查询不到所以要从数据库查询,从数据库查询到再写入缓存。

这里写图片描述

Mybatis一级缓存值得注意的地方:

Mybatis默认就是支持一级缓存的,并不需要我们配置.

mybatis和spring整合后进行mapper代理开发,不支持一级缓存,mybatis和spring整合,spring按照mapper的模板去生成mapper代理对象,模板中在最后统一关闭sqlsession。

Mybatis二级缓存

二级缓存原理:

这里写图片描述

二级缓存的范围是mapper级别(mapper同一个命名空间),mapper以命名空间为单位创建缓存数据结构,结构是map

这里写图片描述

Mybatis二级缓存配置

需要我们在Mybatis的配置文件中配置二级缓存

<!-- 全局配置参数 --> <settings> <!-- 开启二级缓存 --> <setting name="cacheEnabled" value="true"/> </settings>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppgjp.html