Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版
生活随笔
收集整理的這篇文章主要介紹了
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)完整版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java poi插件导出Excel文件合
- 下一篇: linux cmake编译源码,linu