mybatis 执行 INSERT … ON DUPLICATE KEY UPDATE

monologu 发布于 2015/03/13 12:09
阅读 9K+
收藏 0
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里面执行的时候也不报错,但是数据库却插不进去,也不能更新

求解!



加载中
0
甘薯
甘薯

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

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

这样基本应该能找到问题


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

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

<update id="insertOrUpdateGameSemanticTesting" parameterType="list">
<foreach collection="list" item="item" open="" close="" separator=";" index="index">
INSERT INTO t_game_semantic_testing
       (`game_semantic_id`,`content`,`time`,`created_time`,`last_modified_time`) 
       VALUES 
       (#{item.game_semantic_id},#{item.content},1,NOW(),NOW())
       ON DUPLICATE KEY UPDATE 
       `time`=`time` + 1,
       `last_modified_time`=now()
        </foreach>
</update>

0
H
Haixiang

我也是可以的啊

0
啵啵君--火星IT男
啵啵君--火星IT男

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

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

0
疯狂的小马达
疯狂的小马达

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

返回顶部
顶部