mybatis@insert?注解如何判斷insert或是update
@insert注解判斷insert或update
最近參與研發(fā)了一個(gè)項(xiàng)目,需要用到mybatis,和我之前接觸的不同,我們的sql語句并沒有寫在xml中,而是使用的注解。
所以在此做個(gè)筆記方便以后查找。
@insert 注解
簡單的就不多說主要是有個(gè)業(yè)務(wù)需求,當(dāng)一條數(shù)據(jù)存在時(shí)update ,不存在時(shí)insert,這時(shí)就會用到 ON DUPLICATE KEY UPDATE
其中appserverid 和 userid 是主鍵
@Insert({ ?? ??? ?"INSERT INTO KZT_APPSERVER_HISTORY(APPSERVERID,USERID) values(#{appid},#{userid})", ? ? ? ?"ON DUPLICATE KEY UPDATE `TIMES` = `TIMES`+1 ", ?? ??? ?}) ?? ?int addHistory(@Param("userid") String userid,@Param("appid") String appid);
實(shí)現(xiàn)insert Or update的操作
在工作過程中 我們會經(jīng)常遇到 saveOrUpdate這種情況 而Mbatis中并沒有提供這樣的操作
在這里 我們通過selectKey 這個(gè)標(biāo)簽來實(shí)現(xiàn)saveOrUpdate
selectKey的作用是在mybatis框架中,在插入到表格之后或者之前,查詢主鍵的值。
selectKey有以下幾個(gè)屬性
resultType
:返回的主鍵的類型keyPropety
:實(shí)體類對應(yīng)的主鍵的屬性。order
:如果是after,那么先插入,在執(zhí)行selectKey中的sql。如果是before,則反之。
從上面的屬性中我們可以明確 可以在插入前先查 然后進(jìn)行if else 判斷 從而實(shí)現(xiàn)saveOrUpdate 列出一段代碼實(shí)例以供參考
其中 order="BEFORE" 尤為關(guān)鍵
<insert id="insertStat" parameterType="com.thd2000.freela.domain.Stat"> <selectKey keyProperty="statId" resultType="int" order="BEFORE"> select count(*) FROM tb_stat <include refid="Where_Clause" /> </selectKey> <if test="statId == 0"> insert into tb_stat ( stat_type, stat_key, stat_num, create_time, update_time, stat_type_key, stat_type_usertype, stat_type_userid, stat_type_planid ) values ( #{statType}, #{statKey}, #{statNum}, NOW(), NOW(), #{statTypeKey}, #{statTypeUserType}, #{statTypeUserId,jdbcType=VARCHAR}, #{statTypePlanId,jdbcType=VARCHAR} ) </if> <if test="statId > 0"> update tb_stat set stat_num=stat_num+#{statNum},update_time=NOW() <include refid="Where_Clause" /> </if> </insert>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring中自帶的@Schedule實(shí)現(xiàn)自動任務(wù)的過程解析
這篇文章主要介紹了關(guān)于Spring中自帶的@Schedule實(shí)現(xiàn)自動任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06詳解JAVA生成將圖片存入數(shù)據(jù)庫的sql語句實(shí)現(xiàn)方法
這篇文章主要介紹了詳解JAVA生成將圖片存入數(shù)據(jù)庫的sql語句實(shí)現(xiàn)方法的相關(guān)資料,這里就是實(shí)現(xiàn)java生成圖片并存入數(shù)據(jù)庫的實(shí)例,需要的朋友可以參考下2017-08-08SpringBoot實(shí)現(xiàn)跨域的幾種常用方式總結(jié)
跨域是指一個(gè)域下的文檔或腳本試圖去請求另一個(gè)域下的資源,或者涉及到兩個(gè)不同域名的資源之間的交互,由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請求,本文小編給大家分享了SpringBoot實(shí)現(xiàn)跨域的幾種常用方式,需要的朋友可以參考下2023-09-09java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例
這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼的相關(guān)資料,最近需要一個(gè)密碼強(qiáng)度正則表達(dá)式在用戶注冊時(shí)校驗(yàn)用戶密碼強(qiáng)度,需要的朋友可以參考下2023-08-08詳解SpringBoot集成消息隊(duì)列的案例應(yīng)用
Message?Queue又名消息隊(duì)列,是一種異步通訊的中間件??梢岳斫鉃猷]局,發(fā)送者將消息投遞到郵局,然后郵局幫我們發(fā)送給具體的接收者,具體發(fā)送過程和時(shí)間與我們無關(guān)。?消息隊(duì)列是分布式系統(tǒng)中重要的組件,消息隊(duì)列主要解決了應(yīng)用耦合、異步處理、流量削鋒等問題2022-04-04在win10系統(tǒng)下,如何配置Spring Cloud alibaba Seata以及出現(xiàn)問題時(shí)怎么解決
今天教大家如何在win10系統(tǒng)下,配置Spring Cloud alibaba Seata以及出現(xiàn)問題時(shí)怎么解決,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06