mybatisCodeHelperPro自动生成代码的全量和选择

2019-06-15  本文已影响0人  dwwl

在idea中使用mybatisCodeHelperPro插件根据表自动生成实体类,mapper类,*mapper.xml时,dao中生成的新增,更新方法时,会生成insert() insertSelective(),updateByPrimaryKey() updateByPrimaryKeySelective(),带有selective的方法会对每个字段进行null的判断,在现在看来,至少是现在,最好是使用带有Selective的方法,

举个例子:当表中有字段定义如下时,

gmt_modified datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '修改的时间',

用insert()方法但没未给gmt_modified字段赋值时,传入的字段对应参数为null,但是用带有Selective的方法时,该字段会更新值(指的是更新默认值等)。

还有这种情况:

数据库表设计如下:

create table person
(
    name  varchar(20) default 'huangSir' null,
    info  varchar(80)                    null,
    hobby varchar(30) default 'asd'      not null,
    age   int                            null
);

下面的会报错:### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'hobby' cannot be null

        Person person = new Person();
        person.setName("p1");
        int insertNum = personMapper.insert(person);
        System.out.println(insertNum);

用insertSelective()方法即可,即数据库中有default xxx not null 字段时,insert该字段 传null不行

  <insert id="insertSelective" parameterType="com.mpt.starterlearn.po.Person">
    <!--@mbg.generated-->
    insert into person
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="name != null">
        `name`,
      </if>
      <if test="info != null">
        info,
      </if>
      <if test="hobby != null">
        hobby,
      </if>
      <if test="age != null">
        age,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="info != null">
        #{info,jdbcType=VARCHAR},
      </if>
      <if test="hobby != null">
        #{hobby,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        #{age,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
上一篇下一篇

猜你喜欢

热点阅读