java insert自增长id_Java Mybatis 在 insert 之后想获取自增的主键id怎么办
时间: 2024-03-17 22:42:13 浏览: 60
可以使用MyBatis提供的selectKey标签来获取自增的主键id。具体操作如下:
1. 在对应的Mapper.xml文件中的insert标签中添加selectKey标签,示例如下:
```xml
<insert id="insertUser" parameterType="User">
<!-- 添加selectKey标签,keyProperty为JavaBean对象中对应的属性名,order为"BEFORE"表示insert之前获取主键值 -->
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Long">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>
```
2. 在Java代码中调用Mapper接口的insertUser方法并传入相应的参数,示例如下:
```java
User user = new User();
user.setName("张三");
user.setAge(18);
userMapper.insertUser(user);
// 获取自增主键id
Long id = user.getId();
```
其中,user.getId()即为获取自增主键id的方法,id为JavaBean对象User中对应的属性名。
相关问题
mybatis entity的 id 不使用数据库的自增id,该怎么设置
在MyBatis中,如果你的实体类(Entity)的`id`字段不想使用数据库的自动增长ID(通常是主键),你可以选择手动指定一个非自增的属性作为主键。这通常适用于以下情况:
1. **业务需求**:可能有特定的业务规则需要,比如使用用户输入的值、时间戳或其他形式的唯一标识。
2. **性能考虑**:如果在某些场景下,你需要预先知道ID,例如批量插入数据时,可以先生成一个ID列表再一次性插入。
3. **关联表设计**:有时候可能会将ID作为两个表之间的外键,这时可以独立管理这个ID。
要在MyBatis中设置这种情况,你需要做如下操作:
- **实体类(Entity)**:为`id`字段添加一个`@Id`注解,并明确指定它的类型(如`String`, `Long`等),并且提供一个公共的构造函数供MyBatis实例化。
```java
public class MyEntity {
@Id
private String customId; // 自定义的非数据库自增ID
// 其他字段...
public MyEntity(String customId) {
this.customId = customId;
}
// getters and setters...
}
```
- **Mapper XML**:在对应的Mapper XML文件中,使用`insert`或`insertSelective`语句插入时引用`customId`而不是`#{id}`(默认的自增策略)。
```xml
<select id="save" parameterType="com.example.MyEntity" resultType="int">
INSERT INTO table_name (custom_id, other_columns)
VALUES (#{customId}, #{otherColumns})
</select>
```
- **Mapper接口**:在Mapper接口中,映射`save`方法到上述XML的SQL。
```java
public interface MyMapper {
int save(MyEntity entity);
}
```
mybatis-plus mysql插入数据的时候自增ID如何处理
在MyBatis-Plus框架中,当你需要向MySQL数据库插入数据,并期望主键(通常是自动递增的ID)由数据库自动生成时,你可以通过以下步骤操作:
1. **实体类映射**:在对应的实体类(例如`User.java`)上添加`@TableId`注解,并指定生成策略为`idType= AUTO_INCREMENT`,表示主键会自动增长。
```java
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("users")
public class User {
@TableId(value = "id", type = IdType.AUTO_INCREMENT)
private Long id;
// 其他字段...
}
```
2. **Mapper XML配置**:在`UserMapper.xml`或继承自`BaseMapper`的接口中,通常不需要显式地写入插入ID的语句,因为MyBatis-Plus默认会在插入操作后获取自增ID。
3. **执行插入**:通过`insert()`或`insertBatch()`方法执行插入操作,MyBatis-Plus会在后台自动完成ID的插入。
```java
@Autowired
private UserMapper userMapper;
// 插入一条用户信息
User user = new User();
// 设置其他字段...
userMapper.insert(user);
// 或批量插入
List<User> users = ...; // 创建用户列表
userMapper.insertBatch(users);
```
阅读全文