我正在使用mybatis 3.0.4对MySQL5.5数据库进行测试,该数据库带有mysql连接器JDBC驱动程序5.1.16版。
我遇到的问题是,如果我通过openSession()方法获取SqlSession,并通过select from database检索数据,则同一会话中的后续select不知道对数据库所做(和提交)的更改,即使我在session上调用clearCache()。为了同时修改数据库,我使用Mysql命令行客户端。在配置文件中将cacheEnabled设置为false也无济于事。
我附上了配置文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="cacheEnabled" value="false"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="poolMaximumIdleConnections" value="20"></property>
<property name="poolMaximumActiveConnections" value="80"></property>
<property name="poolMaximumCheckoutTime" value="600"></property>
<property name="poolTimeToWait" value="600"></property>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testdb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/TestMapper.xml" />
</mappers>
</configuration>发布于 2018-08-02 18:38:38
好的,我自己解决。这不是mybatis的问题,它依赖于JDBC driver上的事务隔离,缺省情况下是TRANSACTION_REPEATABLE_READ,我需要TRANSACTION_READ_COMMITTED。通过以下方式解决:
getSessionFactory().openSession(TransactionIsolationLevel.READ_COMMITTED);https://stackoverflow.com/questions/9113561
复制相似问题