mybatisplus 在开启事务的情况下,获取自增id
时间: 2024-04-30 22:18:16 浏览: 284
在 MybatisPlus 中,如果你使用了 `@Transactional` 注解开启了事务,那么获取自增 id 的方式与普通情况略有不同。
普通情况下,我们可以在插入数据后,通过 `mybatis` 返回的 `int` 值获取插入的自增 id。示例代码如下:
```java
User user = new User();
user.setName("test");
user.setAge(18);
int result = userMapper.insert(user);
long id = user.getId(); // 获取自增 id
```
但是,在开启事务的情况下,`mybatis` 是无法立即获取到自增 id 的,因为自增 id 的值是在事务提交时才会生成。因此,我们需要使用 `KeyHolder` 来保存自增 id 的值,示例代码如下:
```java
User user = new User();
user.setName("test");
user.setAge(18);
KeyHolder keyHolder = new GeneratedKeyHolder();
int result = userMapper.insert(user, keyHolder);
long id = keyHolder.getKey().longValue(); // 获取自增 id
```
这里的 `GeneratedKeyHolder` 是 `org.springframework.jdbc.support.KeyHolder` 类型,用于保存自增 id 的值。在 `insert` 方法中,我们需要将 `KeyHolder` 对象传入,以便 `mybatis` 将自增 id 的值保存到 `KeyHolder` 对象中。获取自增 id 的方式是通过 `getKey()` 方法获取,并转换为 `long` 类型。
阅读全文