MyBatisGenerator 生成的 insert、InsertSelective 有什么区别?

2023-01-15 10:48:28 +08:00
 movq

看文档说 insertSelective 不插入为 null 的项,但就算在 insert 里面插入,为 null 的项不也是不会插入吗? 如果意思是 insertSelective 为 null 的项会用自动生成的值,那难道 insert 插入时 null 项不会用自动生成的值?

class User{
  Integer id;
  String name;
  String address;
}

那么insert(User{null,"Jack",null}insertSelective(User{null,"Jack",null}有什么区别?

1166 次点击
所在节点    程序员
8 条回复
Oktfolio
2023-01-15 10:59:02 +08:00
User{null,"Jack","@email.com"}

INSERT INTO `user`(field, name, email) VALUES(null, 'Jack', '@email.com')

INSERT INTO `user`(name, email) VALUES('Jack', '@email.com')

这样的区别
movq
2023-01-15 11:11:57 +08:00
@Oktfolio 如果没有设置自增主键,那么这两种插入的结果 id 都是 null 。如果设置了自增主键,这两者的 id 都是自增主键,区别在哪里呢?
Oktfolio
2023-01-15 11:20:17 +08:00
@movq field 为 not null 时前者插不进去(有自增主键除外); field 有 default value 时前者插进去为 null 而不是 default value ;设置了自增主键时,执行结果都是自增主键。
kingwrcy
2023-01-15 11:21:55 +08:00
你为何不看一眼生成的 SQL ,不就知道区别在哪里了?
movq
2023-01-15 11:25:44 +08:00
@Oktfolio field 为 not null 时两者都不能插入
Oktfolio
2023-01-15 11:33:18 +08:00
@movq 噢对,后者加上 default value
Oktfolio
2023-01-15 11:35:04 +08:00
field 为 not null 时均插不进去(有自增主键除外);
field 有 default value 时前者插进去为 null 而不是 default value ;
field 为 not null 且有 default value 时前者插不进去,后者为 default value ;
设置了自增主键时,执行结果都是自增主键。
h0099
2023-01-16 08:45:46 +08:00
#4 早已道明`你为何不看一眼生成的 SQL ,不就知道区别在哪里了?`

#1
INSERT INTO `user`(field, name, email) VALUES(null, 'Jack', '@email.com')
INSERT INTO `user`(name, email) VALUES('Jack', '@email.com')

说白了就是 null 值的语义到底是 作为字段列表的 null 值 还是 不在字段列表中指定他
而数据库层对您没指定的字段赋值是 field default value ,如果没有 field value 会返回 ERROR

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/909015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX