mybatis@insert 註解如何判斷insert或是update

@insert註解判斷insert或update

最近參與研發瞭一個項目,需要用到mybatis,和我之前接觸的不同,我們的sql語句並沒有寫在xml中,而是使用的註解。

所以在此做個筆記方便以後查找。

@insert 註解

簡單的就不多說主要是有個業務需求,當一條數據存在時update ,不存在時insert,這時就會用到 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);

實現insert Or update的操作

在工作過程中 我們會經常遇到 saveOrUpdate這種情況 而Mbatis中並沒有提供這樣的操作

在這裡 我們通過selectKey 這個標簽來實現saveOrUpdate

selectKey的作用是在mybatis框架中,在插入到表格之後或者之前,查詢主鍵的值。

selectKey有以下幾個屬性

  • resultType:返回的主鍵的類型
  • keyPropety:實體類對應的主鍵的屬性。
  • order:如果是after,那麼先插入,在執行selectKey中的sql。如果是before,則反之。

從上面的屬性中我們可以明確 可以在插入前先查 然後進行if else 判斷 從而實現saveOrUpdate 列出一段代碼實例以供參考

其中 order="BEFORE" 尤為關鍵 

<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>

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。 

推薦閱讀: