注解模式下 mybatis插入数据返回主键id
时间: 2024-10-11 19:11:15 浏览: 17
在MyBatis的注解模式下,插入数据并获取主键ID通常是通过`@Insert`和`@Options(useGeneratedKeys="true", keyProperty="id")`两个注解来完成的。假设你有一个User实体类,并希望在插入一条新的User时自动获取自增的主键ID:
```java
import org.apache.ibatis.annotations.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动增长
private Long id;
@Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
public User insert(User user) {
return this.insertSelective(user);
}
// 或者提供一个带选择性的插入方法
@InsertProvider(type = MyMapper.class, method = "insertSelectiveProvider")
public User insertSelective(User user) {
return user; // 返回结果,实际操作中可能会有数据库操作逻辑
}
// 提供一个提供器来插入部分非主键字段
@InsertProvider(type = MyMapper.class, method = "insertSelectiveProvider")
public User insertSelectiveProvider(User user) {
Map<String, Object> params = new HashMap<>();
params.put("name", user.getName());
params.put("email", user.getEmail());
return sqlSession.insert("insertSelective", params); // 这里SQLSession负责获取主键
}
}
```
在上述代码中,`@Options`注解设置了`useGeneratedKeys`为`true`,表示期望查询结果包含插入操作产生的主键值。而`keyProperty`指定了映射到主键字段的属性名。
阅读全文