insert 和 insertSelective的區別


使用逆向工程生成的代碼做一個添加時通常都會給出兩個答案,如題目想要增加一條數據會讓你選擇insert或者insertSelective

 

兩者的區別在於如果選擇insert 那么所有的字段都會添加一遍即使沒有值

<insert id="insert" parameterType="com.ego.pojo.TbContentCategory" >
insert into tb_content_category (id, parent_id, name, 
status, sort_order, is_parent, 
created, updated)
values (#{id,jdbcType=BIGINT}, #{parentId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, 
#{status,jdbcType=INTEGER}, #{sortOrder,jdbcType=INTEGER}, #{isParent,jdbcType=BIT}, 
#{created,jdbcType=TIMESTAMP}, #{updated,jdbcType=TIMESTAMP})
</insert>

  


但是如果使用inserSelective就會只給有值的字段賦值(會對傳進來的值做非空判斷)

<insert id="insertSelective" parameterType="com.ego.pojo.TbContentCategory" >
insert into tb_content_category
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="parentId != null" >
parent_id,
</if>
<if test="name != null" >
name,
</if>
<if test="status != null" >
status,
</if>
<if test="sortOrder != null" >
sort_order,
</if>
<if test="isParent != null" >
is_parent,
</if>
<if test="created != null" >
created,
</if>
<if test="updated != null" >
updated,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=BIGINT},
</if>
<if test="parentId != null" >
#{parentId,jdbcType=BIGINT},
</if>
<if test="name != null" >
#{name,jdbcType=VARCHAR},
</if>
<if test="status != null" >
#{status,jdbcType=INTEGER},
</if>
<if test="sortOrder != null" >
#{sortOrder,jdbcType=INTEGER},
</if>
<if test="isParent != null" >
#{isParent,jdbcType=BIT},
</if>
<if test="created != null" >
#{created,jdbcType=TIMESTAMP},
</if>
<if test="updated != null" >
#{updated,jdbcType=TIMESTAMP},
</if>
</trim>

  


</insert>
如果不明白的話提供一個簡單的例子,再結合上面的源碼體會一下

前提Goods商品表里面有三個字段:id,name,price
1.此時我只設置了一個字段名字:
Goods g = new Goods();
g.setName("手機");
insertSelective(g);
insertSelective執行對應的sql語句的時候,只插入對應的name字段;
(主鍵是自動添加的,默認插入為空)insert into tb_goods (id,name) value (null,"手機");
注意:此時是沒有price什么事的
2、如果使用insert則是不論你設置多少個字段,統一都要添加一遍,不論你設置幾個字段,即使是一個。
Goods g=new Goods();
g.setName("冰箱");
insert(g)
insert執行對應的sql語句的時候,統一都要添加一遍;
insert into tb_goods (id,name,price) value (null,"冰箱",null);

注意:price也在哦!!

---------------------
作者:風泊月
來源:CSDN
原文:https://blog.csdn.net/hello_word2/article/details/80560725
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM