有没有办法在Mybatis Insert SQL配置中嵌入select from table
,它会检查记录是否存在 - >在同一个表上运行更新
否则只是插入数据。
我知道它可以通过编程方式完成,但需要一种方法在mapper.xml中完成它
数据库:Oracle 11g,mybatis 3.1.x
任何建议都有帮助
感谢
答案 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>