Mybatis自动返回主键值的两种方法
时间: 2024-01-10 07:03:55 浏览: 41
MyBatis提供了两种方式来自动返回主键值:
1. 使用<selectKey>元素
可以在insert语句执行后,自动获取到生成的主键值并返回。示例代码如下:
```xml
<insert id="insertUser" parameterType="User">
<!-- 插入语句 -->
insert into user(name, age) values(#{name}, #{age})
<!-- 获取自动生成的主键值 -->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
```
上述代码中,使用<selectKey>元素获取自动生成的主键值,并将其赋值给id属性,以便返回。
2. 使用useGeneratedKeys属性
可以在insert语句执行后,自动获取到生成的主键值并返回。示例代码如下:
```xml
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
<!-- 插入语句 -->
insert into user(name, age) values(#{name}, #{age})
</insert>
```
上述代码中,使用useGeneratedKeys属性自动获取自动生成的主键值,并将其赋值给id属性,以便返回。
相关问题
mybatis添加返回主键
在 MyBatis 中,如果要在插入数据时返回主键,可以通过以下两种方式实现:
1. 在 insert 语句中使用 useGeneratedKeys 和 keyProperty 属性,如下所示:
```
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user (username, password) values (#{username}, #{password})
</insert>
```
其中,useGeneratedKeys 属性为 true,表示使用自动生成的主键;keyProperty 属性为主键对应的实体类属性名,表示将自动生成的主键值设置到该属性中。
2. 在 insert 语句中使用 selectKey 标签,如下所示:
```
<insert id="insertUser" parameterType="User">
<selectKey keyProperty="id" order="AFTER" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (username, password) values (#{username}, #{password})
</insert>
```
其中,selectKey 标签中的 SELECT LAST_INSERT_ID() 表示获取自动生成的主键;keyProperty 属性为主键对应的实体类属性名,表示将自动生成的主键值设置到该属性中;order 属性为 AFTER,表示在插入数据后执行 selectKey 标签中的 SQL 语句。
使用MyBatis插入一条记录时返回主键
MyBatis可以通过以下两种方式返回主键:
1. 使用自增主键
如果表的主键是自增类型,可以在Mapper.xml中设置useGeneratedKeys="true"和keyProperty="id",这样在插入一条记录后,MyBatis会自动将生成的主键值赋给keyProperty指定的属性。
例如:
```
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into user(username, password) values(#{username}, #{password})
</insert>
```
2. 使用非自增主键
如果表的主键不是自增类型,可以在Mapper.xml中设置useGeneratedKeys="false"和keyProperty属性(可以不设置),然后在插入一条记录后,手动获取主键值。
例如:
```
<insert id="insertUser" useGeneratedKeys="false" keyProperty="id">
insert into user(id, username, password) values(#{id}, #{username}, #{password})
</insert>
```
在Java代码中,可以通过以下方式获取插入记录后的主键值:
```
User user = new User();
user.setUsername("test");
user.setPassword("123456");
userMapper.insertUser(user);
int id = user.getId();
```