本文主要是介绍mybaits在Oracle中使用merge into,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
逻辑:如果数据库里有,则进行更新操作,如果没有则插入数据。
这里的insert可以不用写字段
merge INTO table_name a using ( SELECT count( field01) co FROM table_name WHERE field01 = '123456' ) b ON ( b.co <> 0 )
WHEN MATCHED THEN
UPDATE SET field02 = 'update'
WHEREfield01 = '123456' WHEN NOT matched THEN
INSERT
VALUES( '123456', 'insert' )
这里事务要自己提交一下,不然就会卡死
//事务的一些基础信息,如超时时间、隔离级别、传播属性等@Resourceprivate TransactionDefinition transactionDefinition;//事务管理器@Resourceprivate PlatformTransactionManager platformTransactionManager;@Overridepublic Json saveServiceImpl(Entity entity) {//TransactionStatus:事务的一些状态信息,如是否是一个新的事务、是否已被标记为回滚TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);try {int count = this.baseMapper.saveMapper(entity);System.out.println("事务提交前:" + count);platformTransactionManager.commit(transaction);System.out.println("事务已提交:" + count);} catch (Exception e) {e.printStackTrace();platformTransactionManager.rollback(transaction);return Json.error("保存失败" + e.getMessage(), null, 500);}return Json.success(1);}
xml写法(注意:条件字段{field01}不能被更新)
<insert id="saveMapper" parameterType="com.azure.entity.Entity ">merge INTO table_name using (SELECT count(1) counFROM table_nameWHERE field01 = #{field01,jdbcType=VARCHAR}) b ON (b.coun > 0)WHEN NOT matched THENINSERT (field01, field02)VALUES (#{field02,jdbcType=VARCHAR},#{field03,jdbcType=VARCHAR})WHEN matched THENUPDATE<trim prefix="set" suffixOverrides=","><if test="field02 != null and field02 != ''">a.field02 = #{field02,jdbcType=VARCHAR},</if><if test="field03 != null and field03 != ''">a.field03 = #{field03,jdbcType=VARCHAR},</if></trim></insert>
这篇关于mybaits在Oracle中使用merge into的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!