从外部刷新 MyBatis 缓存(映射器之外)
Flush MyBatis Cache externally (outside of mapper)
我正在使用 MyBatis,二级缓存通过 xml 映射器文件中的 <cache/>
激活。
假设我想与从 MyBatis 解耦的底层 DB/DataSource 进行交互,例如通过直接 jdbcTemplate。
当我在 table 上通过 jdbcTemplate Insert/Update/Delete 时,我如何确保 MyBatis 缓存被适当刷新,因为 MyBatis 保存缓存的查询结果。
换句话说,我如何强制 MyBatis 从 MyBatis 映射器外部为特定缓存命名空间刷新其缓存?
我知道 @Options(flushCache=true)
注释,但这似乎在映射器接口之外不起作用。
您可以从配置中获取缓存,然后通过命名空间获取并清除它。
@Resource
SqlSessionFactory sqlSessionFactory;
public void clearCacheByNamespace(){
Configuration config = sqlSessionFactory.getConfiguration();
Cache cache = config.getCache("com.persia.dao.UserInfoMapper");
if(cache != null){
cache.clear();
}
}
您好,我使用了另一种方法,因为我们使用了 spring。使用自动装配 Session 实现并调用适当的方法
public class SomeServerClass{
@Autowired
private org.mybatis.spring.SqlSessionTemplate sqlSessionTemplate;
private void someClearMethod(){
sqlSessionTemplate.clearCache();
}
}
如果我使用接口 org.apache.ibatis.session.SqlSession 它指的是同一个实例
我正在使用 MyBatis,二级缓存通过 xml 映射器文件中的 <cache/>
激活。
假设我想与从 MyBatis 解耦的底层 DB/DataSource 进行交互,例如通过直接 jdbcTemplate。
当我在 table 上通过 jdbcTemplate Insert/Update/Delete 时,我如何确保 MyBatis 缓存被适当刷新,因为 MyBatis 保存缓存的查询结果。
换句话说,我如何强制 MyBatis 从 MyBatis 映射器外部为特定缓存命名空间刷新其缓存?
我知道 @Options(flushCache=true)
注释,但这似乎在映射器接口之外不起作用。
您可以从配置中获取缓存,然后通过命名空间获取并清除它。
@Resource
SqlSessionFactory sqlSessionFactory;
public void clearCacheByNamespace(){
Configuration config = sqlSessionFactory.getConfiguration();
Cache cache = config.getCache("com.persia.dao.UserInfoMapper");
if(cache != null){
cache.clear();
}
}
您好,我使用了另一种方法,因为我们使用了 spring。使用自动装配 Session 实现并调用适当的方法
public class SomeServerClass{
@Autowired
private org.mybatis.spring.SqlSessionTemplate sqlSessionTemplate;
private void someClearMethod(){
sqlSessionTemplate.clearCache();
}
}
如果我使用接口 org.apache.ibatis.session.SqlSession 它指的是同一个实例