useGeneratedKeys和keyProperty

useGeneratedKeys

允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。

(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。

keyProperty(仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。

使用两个属性的insert语句可以将自增的主键id返回

问题:但是在批量插入的时候,我就发现了不能返回

答案:多行插入和生成id,列表名必须是list,可以默认或者指定,但是必须是list

========>

 MyBatis有多行插入和使用生成密钥的问题。 Bug是列表变量名称必须是“列表”,当执行批量插入并获取生成的密钥时。然后相应地访问该对象。因此,对于上述emxample代码将是这样的:

<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="obj2.id"> 
<!-- obj2 is the object with variable id to store generated key --> 
insert into object2 (value) values 
    <foreach collection="list" item="obj1" separator=","> 
     (#{obj1.obj2.id}) 
    </foreach> 

和mapper.java方法的声明看起来是这样:

public Integer batchInsert(@Param("list")List<Obj1> obj1); 

变量的名称必须是列表 。没有其他的。

答案参考:MyBatis useGeneratedKeys用于批量插入中的嵌套对象 - VoidCC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值