关于主键自动生成的问题

关于主键自动生成的问题

@Insert("<script>" +
        "insert into catalog(title,pid,info) values" +
        "<foreach collection='list' item='catalog' separator=','>"+
        "(#{catalog.title},#{catalog.pid},#{catalog.info})"+
        "</foreach>"+
        "</script>")
@Options(useGeneratedKeys = true,keyProperty = "id")//是否自动生成主键,以及主键的属性名为id
void batchInsert(List<Catalog> list);

老师我想问一下:

我们在catalog表中设置了id为主键并且自动增加

然后我们在插入数据的时候,sql语句是这样写的,

insert into catalog(title,pid,info) values(#{catalog.title},#{catalog.pid},#{catalog.info}
);

然后,如果这样在数据库中执行这条语句,不是也能正常执行吗,那个主键id虽然没在插入语句里赋值,但因为我们设置了自动增长,所以不也能正常为id赋值了吗?

那为什么这里还需要设置这个注解呢?↓

@Options(useGeneratedKeys = true,keyProperty = "id")//是否自动生成主键,以及主键的属性名为id

如果不增加这个注解会报错吗?

另外我想知道这个注解有什么作用,请老师详细说一下,因为我不知道我的理解正确不正确

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

@Options(useGeneratedKeys = true,keyProperty = "id")


该注解的作用不单是插入时设置主键自增,它还有一个作用是:执行完插入语句后,自动将自增长值赋值给对象的属性id。这样就可通过Catalog对应的getter方法获取id属性值了。


如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • MasonM 提问者 #1
    老师,这个意思是:不单单在往数据库插入数据时会设置主键自增,还有它还会在插入语句执行完之后,往Catalog的对象的id属性赋值吗?
    2019-07-10 13:16:30
  • 好帮手慕阿满 回复 提问者 MasonM #2
    可以这么理解。祝:学习愉快~
    2019-07-10 14:48:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师