博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis 缓存问题 session
阅读量:4952 次
发布时间:2019-06-12

本文共 1388 字,大约阅读时间需要 4 分钟。

5

当其外部的数据库连接甚至是数据库管理系统,对数据库进行了更改,iBatis(MyBatis)的缓存如果没有过期,是不会对数据库的修改做出相应的?这一点有什么好的解决方案? 
再简单的描述一下(假设数据库系统为MySQL),例如有一个Java的应用持久层框架是使用iBatis(MyBatis)有一个每个500ms(毫秒)调用一次对数据库中ID为100的记录进行 select 操作,由于缓存的时间很长,此时有一个外部程序,假设此程序为一个C/C++程序通过mysql C API 连接到当前数据库(和java应用程序同一个数据库)它将ID为100的记录删除了。然而此时java应用中每个500ms对此记录进行select 操作依然有效!这个很郁闷,iBatis(MyBatis)的缓存有什么选项能够对外部数据库连接对记录进行修改或者删除能让iBatis(MyBatis)主动清除缓存?
 
我也遇到了这个问题。外部程序修改了数据库之后,mybatis的session不会受到影响。你要避免此影响,只能讲session关闭再开启。
 
但是,如果mybatis与spring整合在一起后,
因为我们的dao继承了SqlSessionDaoSupport,而SqlSessionDaoSupport内部sqlSession的实现是使用用动态代理实现的,这个动态代理sqlSessionProxy使用一个模板方法封装了select()等操作,每一次select()查询都会自动先执行openSession(),执行完close()以后调用close()方法,相当于生成了一个新的session实例,所以
我们无需手动的去关闭这个session()
(关于这一点见下面mybatis的官方文档),当然
也无法使用mybatis的一级缓存
,也就是说mybatis的一级缓存在spring中是没有作用的.

官方文档摘要

MyBatis SqlSession provides you with specific methods to handle transactions programmatically. But when using MyBatis-Spring your beans will be injected with a Spring managed SqlSession or a Spring managed mapper. That means that Spring will always handle your transactions.

You cannot call SqlSession.commit()SqlSession.rollback() or SqlSession.close() over a Spring managed SqlSession. If you try to do so, a UnsupportedOperationException exception will be thrown. Note these methods are not exposed in injected mapper classes.

 

转载于:https://www.cnblogs.com/dorothychai/p/4031918.html

你可能感兴趣的文章
appium api 文档
查看>>
pathon连接mysql->AttributeError: 'str' object has no attribute 'decode'
查看>>
Salt-ssh批量部署minion
查看>>
iOS学习笔记 ——Trip to iOS
查看>>
[开发笔记]UIApplication介绍
查看>>
GPIO外部中断
查看>>
ios 第三方qq授权登陆,第一次登陆后,再次登陆,失效
查看>>
扔鸡蛋问题具体解释(Egg Dropping Puzzle)
查看>>
express: command not found.
查看>>
TinyXml高速入门(一)
查看>>
点击表格的单元格时实现变颜色,通过for循环为每个单元格添加一个onclick事件...
查看>>
webform Response的一些成员
查看>>
Countries in War(强连通分量及其缩点)
查看>>
Eclipse中用Link方式安装Maven插件(转载)
查看>>
Android菜鸟的成长笔记(11)——Android中的事件处理
查看>>
JStrom的zk数据
查看>>
使用“dotconnect for oracle”绕过oracle客户端连接Oracle数据库
查看>>
CentOS/RHEL Linux安装EPEL第三方软件源
查看>>
redisson
查看>>
Weblogic集群
查看>>