使用 Mybatis 3 更新 Oracle CLOB 有啥技巧吗?

Posted

技术标签:

【中文标题】使用 Mybatis 3 更新 Oracle CLOB 有啥技巧吗?【英文标题】:Is there some trick to update an Oracle CLOB with Mybatis 3?使用 Mybatis 3 更新 Oracle CLOB 有什么技巧吗? 【发布时间】:2012-07-13 16:43:18 【问题描述】:

我正在更新我的 Oracle 数据库中的 CLOB 列。参数化的 SQL 看起来像是正确执行而没有错误,但是当我运行 select 来查看更改时,它还没有更新。注意:MyBatis 3 是使用 JDBC 参数化查询构建的,所以这些规则也适用。

MyBatis 映射:

<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 调试连接:线程主:-ooo 连接已于 2012-07-13 12:35:26,837 调试打开 PreparedStatement:线程主:- ==> 执行:更新 RSA_SUBMIT_DATA 设置 TXLIFE_REQUEST = ?其中 RSA_SUBMIT_QUEUE_ID = ? 2012-07-13 12:35:26,837 调试 PreparedStatement:线程主:- ==> 参数:testasdfasdf(String), 51(Integer) 2012-07-13 12:35:27,024 DEBUG Connection:Thread main: - xxx Connection Closed

更改后选择查询:

select *
from RSA_SUBMIT_DATA
where RSA_SUBMIT_QUEUE_ID = 51

RSA_SUBMIT_QUEUE_ID | TXLIFE_REQUEST  | TXLIFE_RESPONSE
51             | originalString   | resultString

映射器调用:

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);

感谢任何帮助。

【问题讨论】:

也许您忘记提交事务了?你能添加 Mapper 和 SqlSession 调用的代码吗? 启用了自动提交。我将添加映射器调用。 好的,即使它被设置为自动提交,我还是尝试了 sqlSession.commit() 来查看它是否有任何不同,并且确实如此。问题解决了。但我仍然不明白为什么它以前不起作用。谢谢! 【参考方案1】:

我不认为您的 SqlSession 是通过自动提交打开的。

根据MyBatis User Guide,要使用自动提交,请尝试。

SqlSession sqlSession = sqlSessionFactory.openSession(true);

另外,您的日志语句实际上是在打开一个新连接。见DataSourceUtils.getConnection vs DataSource.getConnection

这可能会返回与您的映射器使用的连接不同的连接。

【讨论】:

以上是关于使用 Mybatis 3 更新 Oracle CLOB 有啥技巧吗?的主要内容,如果未能解决你的问题,请参考以下文章

oracle mybatis 批量更新 怎么获取影响行数

Mybatis在oracle批量更新

mybatis执行批量更新batch update 的方法(oracle,mysql)

mybatis执行批量更新batch update 的方法(oracle,mysql)

mybatis oracle -批量插入,存在则更新

mybatis Oracle 批量插入,批量更新