app开发者平台在数字化时代的重要性与发展趋势解析
1326
2022-11-17
MyBatis插入Insert、InsertSelective的区别及使用心得
目录MyBatis插入Insert、InsertSelective的区别这里说一下两者的区别笔者反思但是为什么会有这两种方法呢Mybatis选择插入,选择更新 Update insert Mapper示例
MyBatis插入Insert、InsertSelective的区别
逆向自动生成的mybatis对应配置Mapper文件里面,有两个方法,分别为insert和insertSelective。这两个方法均是插入对象的方法。为什么会有两个插入方法呢?
这里说一下两者的区别
首先我们看代码如下:
insert方法
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})
insertSelective方法
insert into HSP_MEDIA_INF
MED_SEQ,
EMG_SEQ,
MED_CLASS,
MED_NAME,
MED_FILE,
MED_EXTEND,
http:// MED_TYPE,
MED_DATE,
MED_SIZE,
MED_DATA,
#{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},
从上面连段代码我们会发现insertSelective对应的sql语句加入了NULL校验,只会插入数据不为null的字段值。insert则会插入所有字段,会插入null。
笔者反思但是为什么会有这两种方法呢
总结:由于真实开发中,我们在修改功能的from表单,或者一个类的某些模块编辑的from表单中不会将所有的数据都查询出来放到from表单中然后再insert到数据库,所以我们经常在这些功能中使用insertSelective方法,此时只针对我们操作的属性进行insert操作,而如果使用insert方法,将会把非表单内的内容置为null从而影响数据安全。
Mybatis选择插入,选择更新 Update insert Mapper示例
update table_name
id = #{id,jdbcType=BIGINT},
creater = #{creater,jdbcType=VARCHAR},
modified_date = #{modifiedDate,jdbcType=TIMESTAMP},
where task_id = #{taskId,jdbcType=BIGINT}
insert into table_name
id,
create_date,
modified_date,
#{id,jdbcType=BIGPNcAGbPAINT},
#{createDate,jdbcType=TIMESTAMP},
#{modifiedDate,jdbcType=TIMESTAMP},
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~