外部刷新MyBatis缓存(在mapper之外)

时间:2016-01-13 14:27:46

标签: caching mybatis spring-mybatis

我使用MyBatis在xml映射文件中通过<cache/>激活二级缓存。

假设我想与从MyBatis分离的底层DB / DataSource进行交互,例如通过直接jdbcTemplate。

我可以保证,当我通过jdbcTemplate在表上插入/更新/删除时,MyBatis缓存会被刷新,因为MyBatis保存了缓存的查询结果。

换句话说,如何强制MyBatis从某些缓存命名空间的MyBatis映射器外部刷新缓存?

我知道@Options(flushCache=true)注释,但这似乎不适用于mapper接口之外。

2 个答案:

答案 0 :(得分:5)

您可以从配置中获取缓存,然后通过命名空间获取并清除它。

    @Resource
    SqlSessionFactory sqlSessionFactory;

    public void clearCacheByNamespace(){
        Configuration config = sqlSessionFactory.getConfiguration();
        Cache cache = config.getCache("com.persia.dao.UserInfoMapper");
        if(cache != null){
            cache.clear();
        }
    }

答案 1 :(得分:0)

您好我使用了另一种方法,因为我们使用了春天。使用自动装配Session实现并调用适当的方法

public class SomeServerClass{

    @Autowired
    private org.mybatis.spring.SqlSessionTemplate sqlSessionTemplate;

    private void someClearMethod(){
        sqlSessionTemplate.clearCache();
    }
}

如果我使用接口org.apache.ibatis.session.SqlSession它引用相同的实例