日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版

發布時間:2025/1/21 数据库 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 一、 根據相應的唯一主鍵來判斷是否新增或更新 [對事務支持較好]
      • 二、根據selectkey判斷查詢的count值是否為1,然后再進行新增或更新

前言:我們在做批量更新或者插入時候,不想在代碼中寫sql查詢數據庫,可以通過mybatis 寫sql來實現。有兩種實現方法。

一、 根據相應的唯一主鍵來判斷是否新增或更新 [對事務支持較好]

最關鍵的語句為: on duplicate key update

<insert id="saveOrUpdate" parameterType="java.util.List">insert into user (id,name,age)values<foreach collection="list" item="user" separator="," >(#{id,jdbcType=INTEGER},#{user.age},#{user.name})</foreach>on duplicate key update name= values(name)</insert>

其中name = values(name) name為數據庫字段,這個是重點。

二、根據selectkey判斷查詢的count值是否為1,然后再進行新增或更新

<insert id="saveOrUpdate2" ><selectKey keyProperty="count" resultType="int" order="BEFORE">select count(*) from user where id = #{id}</selectKey><if test="count > 0">update userset age = #{aget},name = #{name}where id = #{id}</if><if test="count==0">insert into user values(#{age},#{name})</if></insert>

通過selectKey做第一次查詢,然后根據結果進行判斷,所以這里的order="BEFORE"是必須的。
也是因為BEFORE,所以沒法通過標簽來臨時存儲中間的值,只能在入參中增加屬性來存放。

總結

以上是生活随笔為你收集整理的Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。