1.mybatis的缓存可以分为一级缓存和二级缓存,一级缓存是sqlsession级别的,二级缓存是application全局的。下面是图例。
2.一级缓存
当一次session会话建立的时候,会通过executor执行相应的操作,拿到的数据会缓存到cache中,第二次在查询一样的查询时,会首先到cache中找缓存中的数据,如果有的话就返回,没有的话就查询数据库,并返回然后存到缓存中,当进行update操作时,缓存会更新,增删改。session关闭时缓存清空。
3.二级缓存
二级缓存是一个全局性的缓存,多个session可以共享其中的缓存,但是它的颗粒度更小,也就是更细,里面的缓存对应一个mapper,以命名空间区分,多个sqlsession也可以共用一个cache。
工作原理是这样的,当sqlsession建立时,会先从二级缓存中找cache对应的查询,如果没有则,继续找一级缓存。
二级缓存的cachingcache是对一级缓存的装饰者模式构建的。以此来增强功能。
4.如何在缓存中查找到匹配的查询
由于cache中是考hashmap来维护查询的结果的,所以需要一个key和value来存缓存。
根据statementid和rowbount,sql语句和参数来确定key的。