【MyBatis】如何在数据插入后获取对应的主键 ID

在数据库操作中,我们经常需要在插入数据后立即获取生成的主键 ID。这种需求在需要维护关联表数据或进行后续业务处理时尤为常见。本文将深入探讨 MyBatis 中获取插入主键的多种实现方式,并解析其底层原理及性能影响。

一、单条数据插入获取 ID

1. useGeneratedKeys 方式(推荐)
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(name, age) 
    VALUES(#{name}, #{age})
</insert>
  • 原理:通过 JDBC 的 Statement.getGeneratedKeys() 方法获取数据库生成的主键
  • 优势:无需额外 SQL 查询
  • 要求:数据库必须支持自增主键(如 MySQL/AUTO_INCREMENT、PostgreSQL/SERIAL)

useGeneratedKeyskeyProperty 是 MyBatis 中用于处理自动生成键(例如自增主键)的两个重要属性。它们主要用于插入操作,以便在插入新记录后获取数据库生成的键值。

useGeneratedKeys 属性
  • 用途useGeneratedKeys 属性用于指示 MyBatis 是否应使用 JDBC 的 getGeneratedKeys 方法来获取数据库生成的键值。
  • 适用场景:通常用于插入操作中,当你希望在插入记录后自动获取数据库生成的键(如自增 ID)。
  • 工作原理
    • useGeneratedKeys 设置为 true 时,MyBatis 会在执行插入操作后调用 JDBC 的 getGeneratedKeys 方法。
    • 这个方法会返回数据库生成的键值(例如,自增的主键 ID)。
    • 这要求数据库和 JDBC 驱动程序支持 getGeneratedKeys 方法。
keyProperty 属性
  • 用途keyProperty 指定了 MyBatis 应该将生成的键值赋给哪个 Java 对象的属性。
  • 工作原理
    • keyProperty 的值应该是你的 Java 对象中用于存储生成键的属性名。
    • 当 MyBatis 获取到生成的键后,它会将键值赋给这个指定的属性。
2. selectKey 方式(通用方案)
<insert id="insertUser">
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值