java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis insert返回id

mybatis执行insert返回id实现详解

作者:悟能不能悟

MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自增或序列且属性名匹配,下面就来具体介绍一下

在 MyBatis 中,执行 INSERT 操作后​​默认返回的是影响的行数(通常是 1)​​,而不是插入的主键 ID。但可以通过以下配置获取新插入记录的 ID:

🛠 两种方式获取自增 ID:

1. ​​useGeneratedKeys+keyProperty(推荐)​​

适用于支持自增主键的数据库(如 MySQL、SQL Server 等)。在 Mapper XML 中配置:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (name, email)
    VALUES (#{name}, #{email})
</insert>

调用示例:

User user = new User();
user.setName("John");
user.setEmail("john@example.com");
int rows = userMapper.insertUser(user); // rows 是受影响行数
Long generatedId = user.getId(); // 获取插入的 ID ✅

2. ​​<selectKey>(适用于 Oracle 或复杂场景)​​

对于 Oracle 或需要自定义查询 ID 的情况:

<insert id="insertUser">
    <selectKey keyProperty="id" resultType="long" order="AFTER">
        SELECT LAST_INSERT_ID() <!-- MySQL 获取最新 ID -->
        <!-- Oracle: SELECT your_sequence.CURRVAL FROM dual -->
    </selectKey>
    INSERT INTO user (name, email)
    VALUES (#{name}, #{email})
</insert>

📝 关键点总结:

​​特性​​​​说明​​
​​默认返回值​​受影响行数(Integer),不是 ID!
​​获取 ID 的方式​​通过 keyProperty 将 ID 注入到参数对象中(如 user.getId())
​​支持数据库​​MySQL、SQL Server 等(useGeneratedKeys) / Oracle(<selectKey>)
​​注解配置​​使用 @Options(useGeneratedKeys=true, keyProperty="id")

💡 示例(注解方式):

@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO user(name, email) VALUES (#{name}, #{email})")
int insertUser(User user); // 执行后 user.id 即为新生成的 ID

⚠️ 注意:

通过正确配置,MyBatis 可以无缝地将新生成的 ID 注入到您的实体对象中,无需额外查询!

到此这篇关于mybatis执行insert如何返回id的实现的文章就介绍到这了,更多相关mybatis insert返回id内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文