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,
      
      
        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插入Insert、InsertSelective的区别及使用心得)