关于主键自动生成的问题
@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
如果不增加这个注解会报错吗?
另外我想知道这个注解有什么作用,请老师详细说一下,因为我不知道我的理解正确不正确
4
收起
正在回答
1回答
同学你好,
@Options(useGeneratedKeys = true,keyProperty = "id")
该注解的作用不单是插入时设置主键自增,它还有一个作用是:执行完插入语句后,自动将自增长值赋值给对象的属性id。这样就可通过Catalog对应的getter方法获取id属性值了。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星