Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版
生活随笔
收集整理的這篇文章主要介紹了
Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、 根據(jù)相應(yīng)的唯一主鍵來判斷是否新增或更新 [對(duì)事務(wù)支持較好]
- 二、根據(jù)selectkey判斷查詢的count值是否為1,然后再進(jìn)行新增或更新
前言:我們?cè)谧雠扛禄蛘卟迦霑r(shí)候,不想在代碼中寫sql查詢數(shù)據(jù)庫(kù),可以通過mybatis 寫sql來實(shí)現(xiàn)。有兩種實(shí)現(xiàn)方法。
一、 根據(jù)相應(yīng)的唯一主鍵來判斷是否新增或更新 [對(duì)事務(wù)支持較好]
最關(guān)鍵的語(yǔ)句為: 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為數(shù)據(jù)庫(kù)字段,這個(gè)是重點(diǎn)。
二、根據(jù)selectkey判斷查詢的count值是否為1,然后再進(jìn)行新增或更新
<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做第一次查詢,然后根據(jù)結(jié)果進(jìn)行判斷,所以這里的order="BEFORE"是必須的。
也是因?yàn)锽EFORE,所以沒法通過標(biāo)簽來臨時(shí)存儲(chǔ)中間的值,只能在入?yún)⒅性黾訉傩詠泶娣拧?/p>
總結(jié)
以上是生活随笔為你收集整理的Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java poi插件导出Excel文件合
- 下一篇: java 内存分析之jmap 详细用法完