C/C++教程

Mybatis属性useGeneratedKeys,keyProperty,keyColumn的使用

本文主要是介绍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的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!