从外部(在映射器外部)刷新MyBatis缓存

Mah*_*ror 3 caching mybatis spring-mybatis

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

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

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

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

我知道@Options(flushCache=true)注解,但这似乎在mapper界面之外不起作用。

Per*_*sia 6

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

    @Resource
    SqlSessionFactory sqlSessionFactory;

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