mybaits在Oracle中使用merge into

ops/2024/9/24 8:52:17/

逻辑:如果数据库里有,则进行更新操作,如果没有则插入数据。

这里的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>

http://www.ppmy.cn/ops/34486.html

相关文章

【学习vue 3.x】(五)VueRouter路由与Vuex状态管理

文章目录 章节介绍本章学习目标 路由的基本搭建与嵌套路由模式vue路由的搭建嵌套路由模式 动态路由模式与编程式路由模式动态路由模式编程式路由 命名路由与命名视图与路由元信息命名路由命名视图路由元信息 路由传递参数的多种方式及应用场景路由传参 详解route对象与router对…

【neteq】tgcall的调用、neteq的创建及接收侧ReceiveStatisticsImpl统计

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…

pandas读取文件导致jupyter内核崩溃如何解决

读取execl文件出现以下问题: str_name "D:\\cao_use\\2017_2021(new).xlsx" train_df pd.read_excel(str_name, usecols[0])崩溃的指示图如下所示: bug原因:读入的文件太大&#xff0c;所需时间过长&#xff0c;在读取的过程中&#xff0c;使用中断按钮暂停会直…

前端面试题(八)

面试形式&#xff1a;线下面试&#xff1a;一面&#xff1a;30分钟二面&#xff1a;30分钟 特殊要求&#xff1a;内网开发自研UI组件库&#xff08;无文档介绍&#xff09;学习能力要求高 面试评价&#xff1a;题目灵活应用性较强 面试官&#xff1a;项目负责人前端负责人 …

简易版商城表设计

1、商品表 CREATE TABLE tz_prod (prod_id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 产品ID,prod_name varchar(300) NOT NULL DEFAULT COMMENT 商品名称,shop_id bigint(20) DEFAULT NULL COMMENT 店铺id,ori_price decimal(15,2) DEFAULT 0.00 COMMENT 原价,p…

ROS2学习——Docker环境下安装于使用(1)

目录 一、简要 二、ROS2和ROS1区别 三、环境搭建与安装 &#xff08;2&#xff09;拉取ubuntu22.04镜像 &#xff08;2&#xff09;安装ROS2 1. 基本设置 2.设置源 3.安装ROS2功能包 4.测试 四、相关指令学习 1.小海龟测试 2.ros2 node等指令 3.rqt 一、简要 随着R…

ffmpeg 推流

参考 【windows&&linux环境下实现ffmpeg&&vlc rtsp本地视频、摄像头推流&#xff0c;VLC推拉流】 本地视频 推流 localhost 下载 mediamtx 服务器 https://github.com/bluenviron/mediamtx/releases 下载 ffmpeg https://github.com/BtbN/FFmpeg-Builds/rel…

密文域可逆信息隐藏技术综述(下)

与联合RDH-EI算法相比&#xff0c;可分离RDH-EI算法提取秘密信息时仅需要隐藏密钥&#xff0c;实现了加密者和隐藏者独立操作、互不干扰&#xff0c;扩大了RDH-EI的使用范围&#xff0c;得到了研究者的广泛关注。现有可分离RDH-EI可分为基于加密前预留空间(reserving room befo…