3

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

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

我如何保证,当我通过 jdbcTemplate 插入/更新/删除 MyBatis 保存缓存查询结果的表时,MyBatis 缓存会被适当地刷新。

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

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

4

2 回答 2

6

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

    @Resource
    SqlSessionFactory sqlSessionFactory;

    public void clearCacheByNamespace(){
        Configuration config = sqlSessionFactory.getConfiguration();
        Cache cache = config.getCache("com.persia.dao.UserInfoMapper");
        if(cache != null){
            cache.clear();
        }
    }
于 2016-01-14T07:02:02.793 回答
0

嗨,我使用了另一种方法,因为我们使用了弹簧。使用自动装配 Session 实现并调用适当的方法

public class SomeServerClass{

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

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

如果我使用接口 org.apache.ibatis.session.SqlSession 它指的是同一个实例

于 2016-02-03T09:08:10.383 回答