在使用 Mybatis 框架处理数据库操作时,经常需要在插入数据后获取自增主键 ID。Mybatis 提供了多种方法来实现这一功能。

如何使用 Mybatis 返回自增主键 ID如何使用 Mybatis 返回自增主键 ID


1. 使用 `@Options` 注解

这种方法可以通过在 POJO 类的属性上添加 `@Options` 注解来实现。该注解的作用是指定主键属性的生成策略。例如:

```java @Options(useGeneratedKeys = true, keyProperty = "id") private Long id; ```

使用此注解后,只需要在映射文件中配置 `useGeneratedKeys` 属性为 `true` 即可:

```xml INSERT INTO users (name) VALUES ({name}) ```

2. 使用 `selectKey` 元素

`selectKey` 元素允许在插入数据前或后执行一个单独的查询来获取自增主键 ID。例如:

```xml SELECT LAST_INSERT_ID() INSERT INTO users (name) VALUES ({name}) ```

此元素中的 `resultType` 属性指定了返回主键的类型,`order` 属性指定了查询的执行时机(`BEFORE` 或 `AFTER`)。

3. 使用 `StatementRunner` 接口

`StatementRunner` 接口提供了一个在执行插入语句后获取自增主键 ID 的方法。例如:

```java StatementRunner runner = sqlSession.getConfiguration().newStatementRunner(sqlSession.getConnection()); runner.insert(insertStatement, parameterObject); long id = runner.getLastGeneratedKey(); ```

这种方法比较灵活,但需要手动处理连接和语句执行。

4. 使用自定义拦截器

可以通过创建自定义拦截器来拦截插入语句并返回自增主键 ID。例如:

```java public class GetIdInterceptor extends Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { Object result = invocation.proceed(); if (invocation.getMethod().equals("insert") && result instanceof Integer) { return (Integer) result; } return result; } } ```

然后在 Mybatis 配置文件中注册拦截器:

```xml ```