其他分享
首页 > 其他分享> > 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

 

标签:keyProperty,useGeneratedKeys,keyColumn,数据库,主键,属性
来源: https://www.cnblogs.com/gujiajie/p/16154915.html