第二次用到mybaits,还是被同一个问题坑了几个小时,所以一定要把这个问题分享给大家。网友很多都是说了一大堆的配置,都是在mybatis.xml中配置。但是,我是没有用mybatis.xml的,我的配置都是在每个**mapper.xml中配置,无非就是一个关联实体类的路径,和一个别名。
在mybatis框架中,在SqlSession未关闭之前,在一个session里面,如果执行相同的select语句,mybatis不会重新查询数据库,而是直接返回缓存在内存中的查询结果,这个是与MyBatis的Cache配置无关的,更改配置文件不起作用,要调用SqlSession.clearCache()函数才可以。
个人理解clearCache清理的是所谓的一级缓存,是在执行insert,update,delete方法后会主动的执行清理。这个缓存是有mybatis自己进行维护的。因此一般是不需要手工进行处理的。
那么你应该是使用了二级缓存导致你所描述的问题。即你在**mapper.xml中使用的了<cache/>标签。使用该标签后,默认开启mybatis的二级缓存,所以在你查询过程中即使你使用session.clearCache()清理了一级缓存(Local Cache )那么,二级缓存中还是存在。
所以把**mapper.xml中的 <cache />标签,去掉即可。