ispringboot+mybatis id不是自增长的而是uuid 如何获取新增后id值
时间: 2024-03-19 22:44:52 浏览: 57
如果你使用的是UUID作为主键,那么你可以在插入数据后通过Mybatis的`selectKey`标签获取插入后的主键值。示例如下:
```xml
<insert id="insertUser" parameterType="User">
insert into user (id, name, age) values (#{id}, #{name}, #{age})
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.String">
select last_insert_id()
</selectKey>
</insert>
```
在上面的例子中,`selectKey`标签的`keyProperty`属性指定了需要将获取到的主键值赋值给哪个对象的属性。在这里,我们将获取到的主键值赋值给`User`对象的`id`属性。`order`属性指定了在什么时候执行`selectKey`标签中的SQL语句,这里设置为`AFTER`表示在插入数据后执行。`resultType`属性指定了返回值的类型,这里设置为`java.lang.String`,因为我们使用的是UUID作为主键。
当你调用`insertUser`方法插入数据时,`selectKey`标签会自动获取插入后的主键值,并将其赋值给`User`对象的`id`属性。你可以在插入数据后直接通过`User`对象的`getId()`方法获取插入后的主键值。
相关问题
mybatis新增后返回非自增的id
如果插入的表中的主键不是自增长的,而是由程序自动生成的,那么可以使用 `selectKey` 元素来实现在插入后返回主键值。
在 Mapper.xml 文件中,需要在插入语句的 `<insert>` 标签中添加 `selectKey` 元素,同时需要设置 `keyProperty` 属性为需要返回的主键字段名,并设置 `order` 属性的值为 `"AFTER"`,表示在插入语句之后执行。
例如,假设插入的表中的主键为 `uuid`,可以这样写:
```xml
<insert id="insertUser" parameterType="com.example.User">
<selectKey keyProperty="uuid" resultType="java.lang.String" order="AFTER">
select uuid()
</selectKey>
insert into user (name, age, uuid) values (#{name}, #{age}, #{uuid})
</insert>
```
在使用 MyBatis 的 `insert` 方法插入数据时,如果插入成功,就可以通过获取 `User` 对象的 `uuid` 属性来获取主键值。
```java
User user = new User();
user.setName("张三");
user.setAge(20);
userMapper.insertUser(user);
System.out.println(user.getUuid());
```
mybatis id生成策略
Mybatis是一种开源的数据访问框架,主要用于将 Java 对象映射到数据库中。在 Mybatis 中,ID 生成策略是指在数据库中为新建的记录生成唯一标识符的方法。Mybatis 支持多种 ID 生成策略,包括以下几种。
1. UUID
UUID(Universally Unique Identifier)是一种通用唯一标识符,由数字和字母组成。Mybatis 可以通过 Java 的 UUID 类生成 UUID,然后将其作为新记录的 ID。
2. 自增长
自增长是一种常见的 ID 生成策略。当插入一条记录时,数据库会自动为其生成一个唯一标识符。Mybatis 可以通过配置文件指定表中的自增长主键列。
3. 序列
序列是一种数据库对象,可以生成连续的唯一数字。在 Mybatis 中,可以使用序列作为新记录的 ID。在配置文件中,需要指定序列名和数据库类型。
4. 雪花算法
雪花算法是 Twitter 开发的一种分布式 ID 生成算法。在 Mybatis 中,可以使用雪花算法生成唯一标识符。需要在 Java 代码中实现雪花算法,并将其配置为 ID 生成器。
5. 自定义
除了以上几种 ID 生成策略之外,Mybatis 还支持自定义生成策略。开发者可以根据自己的需求实现 ID 生成器接口,并将其配置为 Mybatis 的 ID 生成策略。
阅读全文