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也在哦!!
結束!!! 相關文章
- select into from 和 insert into select 的用法和區別
- MySQL中REPLACE INTO和INSERT INTO的區別分析MySql
- insert all和insert first語句的用法
- 和區別
- ../和./和/的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ||和??的區別
- /*和/**的區別
- [LeetCode] 57. Insert Interval 插入區間LeetCode
- Synchronize和ReentrantLock區別ReentrantLock
- SSL和TLS 區別TLS
- jquery $(this) 和this的區別jQuery
- ClassNotFoundException和NoClassDefFoundError區別ExceptionError
- substr()和substring()區別
- JQuery this和$(this)的區別jQuery
- SCSS 和 SASS 區別CSS
- T和?的區別
- localStorage和sessionStorage區別Session
- BeanFactory和FactoryBean區別Bean
- Swift和Kotlin區別SwiftKotlin
- makefile =和:=的區別
- undefined 和 null 區別?UndefinedNull
- ibtis # 和 ¥ 區別
- Python之“==”和“is”區別Python
- null和undefined區別NullUndefined
- ++a和a++的區別
- stringbuilder和stringbuffer區別UI
- SpringCloud和Dubbo區別SpringGCCloud
- sleep()和wait()區別AI
- JoinPoint和ProceedingJoinPoint區別
- 127.0.0.0和localhost區別localhost
- ./ 和sh 的區別
- get和post區別
- url和uri區別
- innerHTML 和 innerTEXT 區別HTML
- Oracle中的insert/insert all/insert firstOracle
- js基本型別和引用型別區別JS型別