V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
movq
V2EX  ›  程序员

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

  •  
  •   movq · 2023-01-15 10:48:28 +08:00 · 1144 次点击
    这是一个创建于 474 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看文档说 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}有什么区别?

    8 条回复    2023-01-16 08:45:46 +08:00
    Oktfolio
        1
    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
        2
    movq  
    OP
       2023-01-15 11:11:57 +08:00
    @Oktfolio 如果没有设置自增主键,那么这两种插入的结果 id 都是 null 。如果设置了自增主键,这两者的 id 都是自增主键,区别在哪里呢?
    Oktfolio
        3
    Oktfolio  
       2023-01-15 11:20:17 +08:00
    @movq field 为 not null 时前者插不进去(有自增主键除外); field 有 default value 时前者插进去为 null 而不是 default value ;设置了自增主键时,执行结果都是自增主键。
    kingwrcy
        4
    kingwrcy  
       2023-01-15 11:21:55 +08:00
    你为何不看一眼生成的 SQL ,不就知道区别在哪里了?
    movq
        5
    movq  
    OP
       2023-01-15 11:25:44 +08:00
    @Oktfolio field 为 not null 时两者都不能插入
    Oktfolio
        6
    Oktfolio  
       2023-01-15 11:33:18 +08:00
    @movq 噢对,后者加上 default value
    Oktfolio
        7
    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
        8
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1645 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:16 · PVG 00:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.