我正在更新Oracle数据库中的CLOB列。参数化的SQL看起来正确执行而没有错误,但是当我运行select来查看更改时,它还没有更新。注意:MyBatis 3是使用JDBC参数化查询构建的,因此这些规则也适用。
MyBatis Mapping:
<update id="updateRSA103RequestData" parameterType="com.company.domain.RSA103XMLData" flushCache="true">
update
RSA_SUBMIT_DATA
set TXLIFE_REQUEST = #{request}
where RSA_SUBMIT_QUEUE_ID = #{id}
</update>
运行时日志:
2012-07-13 12:35:26,728 DEBUG Connection:主线: - ooo
连接已打开2012-07-13 12:35:26,837调试
PreparedStatement:主线: - ==&gt;执行:更新
RSA_SUBMIT_DATA设置TXLIFE_REQUEST =?其中RSA_SUBMIT_QUEUE_ID =?
2012-07-13 12:35:26,837 DEBUG PreparedStatement:主线: - ==&gt;
参数:testasdfasdf(String),51(Integer)2012-07-13 12:35:27,024
DEBUG连接:主线: - xxx连接已关闭
更改后选择查询:
select *
from RSA_SUBMIT_DATA
where RSA_SUBMIT_QUEUE_ID = 51
RSA_SUBMIT_QUEUE_ID | TXLIFE_REQUEST | TXLIFE_RESPONSE
51 | originalString | resultString
Mapper调用:
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
log.debug("autoCommit: " + sqlSessionFactory.getConfiguration().getEnvironment().getDataSource().getConnection().getAutoCommit());
PolicyTransactionMapper policyTransactionDAO = sqlSession
.getMapper(PolicyTransactionMapper.class);
RSA103XMLData xmlData = new RSA103XMLData();
xmlData.setId(rsaSubmitQueueID);
xmlData.setRequest(request);
policyTransactionDAO.updateRSA103RequestData(xmlData);
感谢任何帮助。
答案 0 :(得分:1)
我不认为您的SqlSession是通过自动提交打开的。
每MyBatis User Guide,要使用自动提交,请尝试。
SqlSession sqlSession = sqlSessionFactory.openSession(true);
此外,您的日志语句实际上是在打开一个新连接。见DataSourceUtils.getConnection vs DataSource.getConnection
这可能会返回与映射器正在使用的连接不同的连接。