mybatis ON DUPLICATE KEY UPDATE语句转为oracle语句

on duplicate key update 的意思是插入的数据中存在与唯一主键相同的即存在则更新,不存在则插入,适用于mysql数据库,oracle数据库中使用

MERGE INTO ..... using ...on ...when matched then ... when not matched then
实例如下:

mysql:

insert into table (PID,SPWID,BTCD,SV,BXCD,BSW,BW,DSW,SC,NT,MODITIME)
VALUES
<foreach collection="list" item="bt" index="index" separator=",">
    ( #{bt.pid},#{bt.spwid},#{bt.btcd},#{bt.sv},#{bt.bxcd},#{bt.bsw},#{bt.bw},#{bt.dsw},#{bt.sc},#{bt.nt},#{bt.moditime} )
</foreach>
ON DUPLICATE KEY UPDATE
    pid = values(pid),
    spwid = values(spwid),
    btcd = values(btcd),
    sv = values(sv),
    bxcd = values(bxcd),
    bsw = values(bsw),
    bw = values(bw),
    dsw = values(dsw),
    sc = values(sc),
    nt = values(nt),
    moditime = values(moditime)

对应oracle:

MERGE INTO table t2
USING(
<foreach collection="list" item="bt" index="index" separator="union all">
    SELECT
    #{bt.pid,jdbcType=VARCHAR} PID,
    #{bt.spwid,jdbcType=VARCHAR} SPWID,
    #{bt.btcd,jdbcType=VARCHAR} BTCD,
    #{bt.sv,jdbcType=DOUBLE} SV,
    #{bt.bxcd,jdbcType=VARCHAR} BXCD,
    #{bt.bsw,jdbcType=DOUBLE} BSW,
    #{bt.bw,jdbcType=DOUBLE} BW,
    #{bt.dsw,jdbcType=DOUBLE} DSW,
    #{bt.sc,jdbcType=DOUBLE} SC,
    #{bt.nt,jdbcType=VARCHAR} NT,
    #{bt.moditime,jdbcType=DATE} MODITIME
    from DUAL
</foreach>
)t1
ON (t2.PID = t1.PID)
WHEN MATCHED THEN
UPDATE SET
t2.SPWID=t1.SPWID,
t2.BTCD=t1.BTCD,
t2.SV=t1.SV,
t2.BXCD=t1.BXCD,
t2.BSW=t1.BSW,
t2.BW=t1.BW,
t2.DSW=t1.DSW,
t2.SC=t1.SC,
t2.NT=t1.NT,
t2.MODITIME=t1.MODITIME
WHEN NOT MATCHED THEN
INSERT (PID,SPWID,BTCD,SV,BXCD,BSW,BW,DSW,SC,NT,MODITIME) VALUES
(t1.PID,t1.SPWID,t1.BTCD,t1.SV,t1.BXCD,t1.BSW,t1.BW,t1.DSW,t1.SC,t1.NT,t1.MODITIME)
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Mybatis中的on duplicate key update指的是在插入数据时,如果发生唯一键冲突,就执行更新操作。这个功能可以通过在insert语句中使用on duplicate key update子句来实现。在Mybatis中,可以使用动态SQL语句来生成这样的insert语句,以实现数据的插入和更新。 ### 回答2: MyBatis 是一款 ORM 框架,可以很好地解决数据库 CRUD 操作,其中包括数据插入操作。在数据插入时,可能会出现重复数据的情况,为了避免出现唯一键冲突的异常,可以使用 on duplicate key update 功能来更新已存在的数据。 on duplicate key update 语法可以在插入语句中检测唯一键冲突,如果出现冲突,则更新已存在的数据。该功能可以用于插入新数据或更新已存在的数据,因此可以用于更新部分字段的值,而不是更新所有的字段。 在 MyBatis 中使用 on duplicate key update 很简单,只需要在插入语句中添加 on duplicate key update 子句,并在该子句中指定要更新的字段和值。例如: ``` <insert id="insertOrUpdate" parameterType="User"> insert into user (id, name, age) values (#{id}, #{name}, #{age}) on duplicate key update name=#{name}, age=#{age} </insert> ``` 在上述代码中,首先会尝试插入一条数据,如果出现唯一键冲突,则会更新已存在的数据的 name 和 age 字段的值。如果没有冲突,则插入新数据。 在实际开发中,可以根据业务需求使用 on duplicate key update 功能,避免出现唯一键冲突的异常,并且可以有效地更新已存在的数据,提高代码的可维护性和稳定性。 ### 回答3: MyBatis是一种Java持久层框架,用于将Java对象映射到关系型数据库中的表。在MyBatis中,“on duplicate key update”是一种用于处理在插入数据时遇到重复键的操作。当尝试向一个已经存在的键中插入新数据时,MyBatis将根据指定的更新操作来更新该键的现有行。 在MyBatis中,要使用“on duplicate key update”操作,您需要在SQL语句中使用INSERT ON DUPLICATE KEY UPDATE子句。这个子句的格式如下: INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) ON DUPLICATE KEY UPDATE col1=newval1, col2=newval2, col3=newval3; 在这个语句中,当尝试向“table”表中插入新数据时,MyBatis将首先检查是否存在具有相同值的键。如果存在,则MyBatis将使用指定的更新操作来更新该键的现有行,否则将插入新行。要注意的是,您需要使用判断键是否重复的Unique索引或Primary key来使用这个子句。 总的来说,使用MyBatis的“on duplicate key update”操作可以帮助您快速地处理重复信息的插入操作,从而提高您的应用程序的效率和性能。如果您需要在您的MyBatis应用程序中处理这种情况,那么使用这个操作是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值