欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis插入Insert、InsertSelective的區(qū)別及使用心得

 更新時間:2021年12月03日 09:01:46   作者:啊~~噙!  
這篇文章主要介紹了MyBatis插入Insert、InsertSelective的區(qū)別及使用心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

MyBatis插入Insert、InsertSelective的區(qū)別

逆向自動生成的mybatis對應(yīng)配置Mapper文件里面,有兩個方法,分別為insert和insertSelective。這兩個方法均是插入對象的方法。為什么會有兩個插入方法呢?

這里說一下兩者的區(qū)別

首先我們看代碼如下:

insert方法

<insert id="insert" parameterType="demo.pojo.domain.HspMediaInf" >
    insert into MEDIA_INF (MED_SEQ, EMG_SEQ, MED_CLASS, 
      MED_NAME, MED_FILE, MED_EXTEND, 
      MED_TYPE, MED_DATE, MED_SIZE, 
      MED_DATA)
    values (#{medSeq,jdbcType=VARCHAR}, #{emgSeq,jdbcType=VARCHAR}, #{medClass,jdbcType=VARCHAR}, 
      #{medName,jdbcType=VARCHAR}, #{medFile,jdbcType=VARCHAR}, #{medExtend,jdbcType=VARCHAR}, 
      #{medType,jdbcType=VARCHAR}, #{medDate,jdbcType=TIMESTAMP}, #{medSize,jdbcType=DECIMAL}, 
      #{medData,jdbcType=BLOB})
  </insert>

insertSelective方法

<insert id="insertSelective" parameterType="activetech.zyyhospital.pojo.domain.HspMediaInf" >
    insert into HSP_MEDIA_INF
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="medSeq != null" >
        MED_SEQ,
      </if>
      <if test="emgSeq != null" >
        EMG_SEQ,
      </if>
      <if test="medClass != null" >
        MED_CLASS,
      </if>
      <if test="medName != null" >
        MED_NAME,
      </if>
      <if test="medFile != null" >
        MED_FILE,
      </if>
      <if test="medExtend != null" >
        MED_EXTEND,
      </if>
      <if test="medType != null" >
        MED_TYPE,
      </if>
      <if test="medDate != null" >
        MED_DATE,
      </if>
      <if test="medSize != null" >
        MED_SIZE,
      </if>
      <if test="medData != null" >
        MED_DATA,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="medSeq != null" >
        #{medSeq,jdbcType=VARCHAR},
      </if>
      <if test="emgSeq != null" >
        #{emgSeq,jdbcType=VARCHAR},
      </if>
      <if test="medClass != null" >
        #{medClass,jdbcType=VARCHAR},
      </if>
      <if test="medName != null" >
        #{medName,jdbcType=VARCHAR},
      </if>
      <if test="medFile != null" >
        #{medFile,jdbcType=VARCHAR},
      </if>
      <if test="medExtend != null" >
        #{medExtend,jdbcType=VARCHAR},
      </if>
      <if test="medType != null" >
        #{medType,jdbcType=VARCHAR},
      </if>
      <if test="medDate != null" >
        #{medDate,jdbcType=TIMESTAMP},
      </if>
      <if test="medSize != null" >
        #{medSize,jdbcType=DECIMAL},
      </if>
      <if test="medData != null" >
        #{medData,jdbcType=BLOB},
      </if>
    </trim>
  </insert>

從上面連段代碼我們會發(fā)現(xiàn)insertSelective對應(yīng)的sql語句加入了NULL校驗,只會插入數(shù)據(jù)不為null的字段值。insert則會插入所有字段,會插入null。

筆者反思但是為什么會有這兩種方法呢

總結(jié):由于真實開發(fā)中,我們在修改功能的from表單,或者一個類的某些模塊編輯的from表單中不會將所有的數(shù)據(jù)都查詢出來放到from表單中然后再insert到數(shù)據(jù)庫,所以我們經(jīng)常在這些功能中使用insertSelective方法,此時只針對我們操作的屬性進(jìn)行insert操作,而如果使用insert方法,將會把非表單內(nèi)的內(nèi)容置為null從而影響數(shù)據(jù)安全。

Mybatis選擇插入,選擇更新 Update insert Mapper示例

<update id="updateMethod" parameterType="com.zjl.domain">
    update table_name
    <set>
      <if test="id != null">
        id = #{id,jdbcType=BIGINT},
      </if>
      <if test="creater != null">
        creater = #{creater,jdbcType=VARCHAR},
      </if>
      <if test="modifiedDate != null">
        modified_date = #{modifiedDate,jdbcType=TIMESTAMP},
      </if>
    </set>
    where task_id = #{taskId,jdbcType=BIGINT}
  </update>
<insert id="insertSelective" parameterType="com.zjl.domain">
    insert into table_name
    <trim prefix="(" suffix=")" suffixOverrides=",">
    <if test="id != null">
    id,
    </if>
    <if test="createDate != null">
    create_date,
    </if>
    <if test="modifiedDate != null">
    modified_date,
    </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
    <if test="id != null">
    #{id,jdbcType=BIGINT},
    </if>
    <if test="createDate != null">
    #{createDate,jdbcType=TIMESTAMP},
    </if>
    <if test="modifiedDate != null">
    #{modifiedDate,jdbcType=TIMESTAMP},
    </if>
    </trim>
</insert>

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring之WEB模塊配置詳解

    Spring之WEB模塊配置詳解

    這篇文章主要介紹了Spring之WEB模塊配置詳解,簡單介紹了其繼承方式,代理方式,以及相關(guān)詳細(xì)配置代碼,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • springboot內(nèi)置tomcat之NIO處理流程一覽

    springboot內(nèi)置tomcat之NIO處理流程一覽

    這篇文章主要介紹了springboot內(nèi)置tomcat之NIO處理流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java實現(xiàn)微信App支付服務(wù)端

    java實現(xiàn)微信App支付服務(wù)端

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)微信App支付服務(wù)端,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 解決Mybatis-Plus操作分頁后數(shù)據(jù)失效問題

    解決Mybatis-Plus操作分頁后數(shù)據(jù)失效問題

    這篇文章主要介紹了解決Mybatis-Plus操作分頁后數(shù)據(jù)失效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Idea中如何修改項目的SVN地址

    Idea中如何修改項目的SVN地址

    這篇文章主要介紹了Idea中如何修改項目的SVN地址問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java GC垃圾回收算法分析

    Java GC垃圾回收算法分析

    垃圾回收機(jī)制簡稱GC,主要用于Java堆的管理。在JVM中程序計數(shù)器、虛擬機(jī)棧、本地方法棧生命周期隨跟隨線程,棧幀的進(jìn)棧和入棧能實現(xiàn)自動清理。而 jdk8后元空間為本地內(nèi)存也不受GC控制,所以垃圾回收主要是在堆中
    2022-12-12
  • 聊聊Controller中RequestMapping的作用

    聊聊Controller中RequestMapping的作用

    這篇文章主要介紹了Controller中RequestMapping的作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實現(xiàn)并查集

    Java實現(xiàn)并查集

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java中的EnumMap集合解析

    Java中的EnumMap集合解析

    這篇文章主要介紹了Java中的EnumMap集合解析,EnumMap是Map接口的一種實現(xiàn),專門用于枚舉類型的鍵,所有枚舉的鍵必須來自同一個枚舉,
    EnumMap不允許鍵為空,允許值為空,需要的朋友可以參考下
    2023-09-09
  • 基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯點、幻讀

    基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯點、幻讀

    這篇文章主要介紹了基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯點、幻讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論