我使用MyBatis,通过xml文件中的<cache/>激活二级缓存。
假设我想要与与MyBatis分离的底层DB/DataSource进行交互,例如通过直接jdbcTemplate。
我如何保证,当我在表上插入/更新/删除MyBatis缓存时,MyBatis缓存会被刷新,因为MyBatis保存缓存的查询结果。
换句话说,如何迫使MyBatis从MyBatis映射器外部将其缓存刷新为特定的缓存命名空间?
我知道@Options(flushCache=true)注释,但这似乎不能在映射器接口之外工作。
发布于 2016-01-14 07:02:02
您可以从配置中获取缓存,然后通过命名空间获取并清除它。
@Resource
SqlSessionFactory sqlSessionFactory;
public void clearCacheByNamespace(){
Configuration config = sqlSessionFactory.getConfiguration();
Cache cache = config.getCache("com.persia.dao.UserInfoMapper");
if(cache != null){
cache.clear();
}
}发布于 2016-02-03 09:08:10
嗨,我用了另一种方法,因为我们用了弹簧。使用自动会话实现并调用适当的方法
public class SomeServerClass{
@Autowired
private org.mybatis.spring.SqlSessionTemplate sqlSessionTemplate;
private void someClearMethod(){
sqlSessionTemplate.clearCache();
}
}如果我使用接口org.apache.ibatis.session.SqlSession,它引用的是同一个实例
https://stackoverflow.com/questions/34769226
复制相似问题