MyBatis generator 自动生成的 mapper 文件中有两个 insert 方法,insertinsertSelective,这两个方法都可以插入一条数据

对于 insert:

int insert(T record);

对于 insertSelective

int insertSelective(T record);

insertSelective 对应的 SQL 语句加入了 NULL 检验,只会插入数据不为 null 的字段,而 insert 会插入所有字段,会插入 null 数据。

也就意味着如果定义了表 default 字段,使用 insert 还是会插入 null 而忽略 default

insertSelective 当字段为 null 时会用 default 自动填充。

扩展

同理,更新 update 的操作也有对应的两个方法

  • updateByPrimaryKey 对你注入的字段全部更新(不判断是否为 Null)
  • updateByPrimaryKeySelective 会对字段进行判断再更新(如果为 Null 就忽略更新)

和 insert , insertSelective 类似,带有 selective 的方法会检查对象的值是否 null,如果为 null 则不会更新。