开发者社区> 问答> 正文

mybatis 执行 INSERT … ON DUPLICATE KEY UPDATE?报错

mybatis  在执行  INSERT … ON DUPLICATE KEY UPDATE 格式的语句的时候
没有报错,库表也没插入数据,数据库是mysql
用mysql客户端执行这条语句的时候却是能插入的
是因为myBatis不支持吗?
语句示例:
        INSERT INTO test
        (main_id,score,totalCount)
        VALUES
        (123,5.0,12345)
        ON DUPLICATE KEY UPDATE
        score=VALUES(score),
        totalCount=VALUES(totalCount)
main_id是主键,以上语在mysql客户端执行能正确插入或更新


    <insert id="insertOrUpdate" parameterType="这里就不写了">
        INSERT INTO test
        (main_id,score,totalCount)
        VALUES
        (456,5.0,12345) <!--这里有个参数是456,同上面一条的123不一样-->
        ON DUPLICATE KEY UPDATE
        score=VALUES(score),
        totalCount=VALUES(totalCount)
    </insert>

这是mybatis里面执行的语句,为了直观些,我直接写了一条死语句进来。
同样的两条语句,在mybatis里面执行的时候也不报错,但是数据库却插不进去,也不能更新

求解!



展开
收起
爱吃鱼的程序员 2020-06-14 17:25:54 2098 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你应该先查一下数据库端的log文件看看这条语句是否被正确传输过去了,

    如果根本就没传过去,再把这条语句修改为明显错误的看看mybatis是否正常load进去并且运行了, 

    这样基本应该能找到问题


    是什么原因呢?求解,我也碰到了感谢你们的耐心回答,我找到问题所在了在调用了insert或update语句之后有没有session.commit();语句?那就加上去啊没有啊没有啊

    测试了一下完全可以的,你mybatis是什么版本?我执行的代码:

    <updateid="insertOrUpdateGameSemanticTesting"parameterType="list">
    <foreachcollection="list"item="item"open=""close=""separator=";"index="index">
    INSERTINTOt_game_semantic_testing
        (`game_semantic_id`,`content`,`time`,`created_time`,`last_modified_time`) 
        VALUES 
        (#{item.game_semantic_id},#{item.content},1,NOW(),NOW())
        ONDUPLICATEKEYUPDATE 
        `time`=`time`+1,
        `last_modified_time`=now()
        </foreach>
    </update>

    我也是可以的啊

    博主写得很不错,这里分享大家一个专注于Java开发的个人博客,里面干货满满,有需要的请点击这里。

    http://www.marsitman.com/mybatis/mybatis-oracle-getid.html

    楼主问题解决了吗,解决的话拿出来分享一下啊

    2020-06-14 17:26:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载