现象:程序添加了一条记录,数据库中已经看到添加成功了。但是程序查询语句返回结果中没有新加的记录。直到重启程序后,才能看到之前添加的数据。
原因:mybatis缓存的原因。mybatis框架自带缓存,一级缓存和二级缓存,而一级缓存默认是开启的。什么意思呢?意思就是如果同一个用户执行同一条sql,那么mybatis第二次执行的时候会不读取数据库,从缓存里面获取数据返回。所有没有读取到最新数据。解决办法当然就是关闭一级缓存了。我使用的是局部关闭,就是关闭某几个方法的。而不是全局关闭。如下:
XML文件中增加了flushCache="true"就说明这个sql不用缓存,那么自然就不会读取缓存的数据了。
全局关闭: