MyBatis插入Insert、InsertSelective的區(qū)別及使用心得
MyBatis插入Insert、InsertSelective的區(qū)別
逆向自動生成的mybatis對應配置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對應的sql語句加入了NULL校驗,只會插入數(shù)據(jù)不為null的字段值。insert則會插入所有字段,會插入null。
筆者反思但是為什么會有這兩種方法呢
總結(jié):由于真實開發(fā)中,我們在修改功能的from表單,或者一個類的某些模塊編輯的from表單中不會將所有的數(shù)據(jù)都查詢出來放到from表單中然后再insert到數(shù)據(jù)庫,所以我們經(jīng)常在這些功能中使用insertSelective方法,此時只針對我們操作的屬性進行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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Mybatis collection查詢集合屬性報錯的解決方案
這篇文章主要介紹了Mybatis collection查詢集合屬性報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java網(wǎng)絡編程UDP實現(xiàn)消息發(fā)送及聊天
這篇文章主要為大家詳細介紹了Java網(wǎng)絡編程UDP實現(xiàn)消息發(fā)送及聊天,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07
dubbo?filter中有關bean注入和配置文件讀取方式
這篇文章主要介紹了dubbo?filter中有關bean注入和配置文件讀取方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
MyEclipse8.6首次運行maven項目圖標上沒有小M的標識怎么解決
myeclipse8.6導入maven項目后識別為普通java項目,即項目圖標上沒有小M的標識。這時是無法直接運行的,怎么解決這一問題呢?下面小編給大家?guī)砹私鉀Q方案,需要的朋友參考下吧2016-11-11
Java實現(xiàn)Excel文件轉(zhuǎn)PDF(無水印無限制)
這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)Excel文件轉(zhuǎn)PDF的效果,并可以無水印、無限制。文中的示例代碼講解詳細,需要的可以參考一下2022-06-06

