Mybatis属性useGeneratedKeys,keyProperty,keyColumn的使用
2022/4/17 6:13:48
本文主要是介绍Mybatis属性useGeneratedKeys,keyProperty,keyColumn的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
事情情景
在做一个插入操作的时候,总是报一个主键重复或者字段不能为空的错误:
原因
在A.mapper中的insert语句中,使用了useGeneratedKeys,keyProperty属性,那这两个属性是干什么用的呢?
useGeneratedKeys=true表示使用数据库自动增长的主键
keyProperty设置自增主键返回字段(用户在插入数据之后获取相应主键)
作用
知道了这两个属性是做什么的,那起到什么作用了呢?
作用: 完成不需要输入主键也能插入数据了,而且只适用于insert语句
解决方法
知道了是什么原因造成了这个问题,那么接下来就好解决了。
首先先检查了数据库中这个id字段有没有设置为自增长和非空
然后又去与A.mapper相关联的另一个B.mapper中查看相应的插入语句有没有设置这两个属性,果然没写,写上之后完美解决问题。
<insert id="insertSelective" parameterType="com.***.UserPasswordDO" keyProperty="id" useGeneratedKeys="true">
规则
1、我们使用keyProperty属性指定id为主键字段,同时使用useGeneratedKeys属性告诉MyBatis这个主键是否使用数据库的内置规则生成。
2、在数据库中设置id的自增规则
拓展
在使用keyProperty的时候,发现竟然还有个类似的属性:keyColumn,那么他是干什么用的呢?
keyColumn用于指定数据库table中的主键
也就是说这是三个属性同时使用时,则可以使用数据库中自增长的主键,并且可以将主键的值返回给keyProperty中写好的字段
总结:
useGeneratedKeys 设置为"true"表明要 MyBatis 获取由数据库自动生成的主键;
keyProperty="id"指定把获取到的主键值注入到 Student(实体类) 的 id 属性。
keyColumn是数据库中主键名,如果数据库主键名和实体类字段名都规范,可以不用keyColumn
这篇关于Mybatis属性useGeneratedKeys,keyProperty,keyColumn的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升