Mybatis属性useGeneratedKeys,keyProperty,keyColumn的使用

  小咸儿又来了,这次还是在做项目中遇到的问题。

事情情景

  小咸儿再做一个插入操作的时候,总是报一个主键重复的错误:

问题

主键重复:Duplicate entry ‘17’ for key ‘PRIMARY’

原因

  小咸儿在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中写好的字段

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值