MyBatis插入Insert、InsertSelective的区别及使用心得
作者:啊~~噙! 发布时间:2023-08-25 04:34:28
标签:MyBatis,Insert,InsertSelective
MyBatis插入Insert、InsertSelective的区别
逆向自动生成的mybatis对应配置Mapper文件里面,有两个方法,分别为insert和insertSelective。这两个方法均是插入对象的方法。为什么会有两个插入方法呢?
这里说一下两者的区别
首先我们看代码如下:
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>
从上面连段代码我们会发现insertSelective对应的sql语句加入了NULL校验,只会插入数据不为null的字段值。insert则会插入所有字段,会插入null。
笔者反思但是为什么会有这两种方法呢
总结:由于真实开发中,我们在修改功能的from表单,或者一个类的某些模块编辑的from表单中不会将所有的数据都查询出来放到from表单中然后再insert到数据库,所以我们经常在这些功能中使用insertSelective方法,此时只针对我们操作的属性进行insert操作,而如果使用insert方法,将会把非表单内的内容置为null从而影响数据安全。
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>
来源:https://blog.csdn.net/huluwa10526/article/details/90232350


猜你喜欢
- Selenium.WebDriverSelenium WebDriver 是一组开源 API,用于自动测试 Web 应用程序,利用它可以通过
- 本文实例讲述了C#对图片文件的压缩、裁剪操作方法,在C#项目开发中非常有实用价值。分享给大家供大家参考。具体如下:一般在做项目时,对图片的处
- 博主第一次安装Android Studio 3.6版本的时候就找不到R.java文件,于是在网上找个各种方法,但是都没能解决问题。注意:本博
- 前导:发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实
- 最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程
- 记住我功能原理分析还记得前面咱们分析认证流程时,提到的记住我功能吗?现在继续跟踪找到AbstractRememberMeServices对象
- SpringMVC * path路径的坑SpringMVC提供了很方便的 * 供我们开发使用。在配置文件中通过<mvc:mapping
- 这个工具比较简单,用于配合另外一个工具进行文件传送,废话少说,上代码import java.net.URL;import java.net.
- log4j MDC实现日志追踪MDC 中包含的可以被同一线程中执行的代码所访问内容。当前线程的子线程会继承其父线程中的 MDC 的内容。记录
- 我最近上班又遇到一个小难题了,就是如题所述:ViewPager预加载的问题。相信用过ViewPager的人大抵都有遇到过这种情况,网上的解决
- 兄dei,耐心把我的写的看完,我写的不繁琐,很好理解.IDEA插件之Mybatis Log plugin
- 日期和时间,在我们开发中非常重要。DateTime在C#中,专门用来表达和处理日期和时间。本文算是多年使用DateTime的一个总结,包括D
- 简介上一篇我们讲了简单的动态BroadCast,今天我们通过手工来发送一条BroadCast进一步来了解BroadCast。在上一篇里我们使
- 本文实例为大家分享了android自定义环形对比图的具体代码,供大家参考,具体内容如下1.首先在res/values里创建一个attr.xm
- C#利用win32 Api 修改本地系统时间、获取硬盘序列号,可以用于软件注册机制的编写!using System;using System
- 网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和
- 1.Comparable前言,想要排序Student.有代码:import java.util.Arrays; class Stu
- springboot Jpa通用接口,公共方法de 简单使用 pom文件加入jpa这是我的例子使用的依赖。jpa必须当
- 在Spring MVC中经常要用到 * ,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属
- 场景在任何一个Form表单的操作页面或者数据台账的查询页面,基本都会看到一个清除的按钮,其功能就是用来清除我们需要抛弃的已经写入到控件内的数