MyBatis进行提取并基于返回值在Xxxmapper.xml中执行更新/插入?

时间:2015-03-11 17:48:01

标签: java sql database mybatis

有没有办法在Mybatis Insert SQL配置中嵌入select from table,它会检查记录是否存在 - >在同一个表上运行更新
否则只是插入数据。 我知道它可以通过编程方式完成,但需要一种方法在mapper.xml中完成它

数据库:Oracle 11g,mybatis 3.1.x

任何建议都有帮助

感谢

2 个答案:

答案 0 :(得分:2)

使用 UPSERT 语句,大多数数据库支持 UPSERT 语句。返回值将是更新或插入的记录数。虽然您尚未提供执行更新或插入操作的数据库。

<强>更新

Oracle 11g支持upsert

MERGE INTO KP_TBL USING DUAL ON (MY_KEY= #{myKey}) 
        WHEN MATCHED THEN 
                UPDATE SET OTHER_PARAM = #{myOtherParam},
                           SEC_PARAM = #{sec_param}
        WHEN NOT MATCHED THEN
                INSERT (MY_KEY, OTHER_PARAM,SEC_PARAM)  VALUES(#{myKey},#{myOtherParam},#{sec_param)

答案 1 :(得分:0)

这可以使用SQL方法完成。不幸的是,您没有提到您使用哪个特定的数据库管理系统,因为ANSI SQL中没有这样的功能。 例如,如果您使用MySQL INSERT ... ON DUPLICATE KEY UPDATE是可行的方法。

E.g:

<insert id="instSample" parameterType="SampleModel">
   INSERT INTO table (a,b,c) VALUES (#{a}, #{b}, #{c})
   ON DUPLICATE KEY UPDATE c = #{c};
</insert>