缓存的目的:将部分数据缓存到内存中,提高系统的性能
一级缓存:它是sqlsession级别的,每个sqlsession对象内部都有一个hashmap用来存放查询的数据,mybatis中默认时开启的
(1)当执行查询时,首先如果是第一次查询,会从数据库中查询并将结果缓存到一级缓存中,以后再查相同的sql就不再发出sql语句,而是直接从缓存中拿
(2)如果在两次相同的查询之间,存在inset,update,delete的commit操作,它会清空缓存
二级缓存: 它是mapper级别的,当然如果两个mapper.xml文件对应同一个命名空间,它们就共用同一个二级缓存,确切说二级缓存是命名空间级别的,
(1)当一个sqlsession查询出数据会缓存到二级缓存中,其它的sqlsession执行相同的查询可以从缓存中读取
(2)其它的sqlsession执行了插入、删除、修改等操作,会清空二级缓存
注意点:
(1)首先需要在sqlmapconfig.xml中设置开启二级缓存
(2)需要在mapper.xml中配置缓存选项
(3)对于缓存的对象需要实现序列化接口,因为二级缓存不一定在内存中可能其它地方如磁盘或者远程服务器上
mybatis和其它分布式缓存框架的整合:
mybatis提供了一个cache接口,实现cache接口即可,默认提供的是这个实现类
PerpetualCache
(1)在mapper中cache标签的type为你所想要使用的实现类,并加入包和对应的第三方的缓存的配置文件等