使用mybatisplus插入数据,如何获取当前插入数据的id值,id自增
时间: 2024-03-10 21:49:09 浏览: 47
在使用Mybatis Plus插入数据时,可以通过实体类的主键属性来获取当前插入数据的id值。假设主键属性名为id,id为自增长类型,步骤如下:
1. 在实体类中,为主键属性添加注解@TableId(type = IdType.AUTO),指定id为自增长类型。
2. 执行插入操作,Mybatis Plus会自动将插入的自增主键值赋值给实体类的主键属性。
3. 在插入操作后,通过实体类的主键属性即可获取当前插入数据的id值。
示例代码如下:
```java
// 实体类
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
}
// 插入操作
User user = new User();
user.setName("张三");
user.setAge(18);
userMapper.insert(user);
// 获取插入数据的id值
Long id = user.getId();
```
需要注意的是,如果插入操作失败,实体类的主键属性值仍为null。因此,在获取插入数据的id值时,应先判断主键属性值是否为null。
相关问题
mybatis plus插入数据并返回自增id
在 MyBatis Plus 中,插入数据并返回自增 ID 可以通过以下步骤实现:
1. 创建一个实体类,用于映射数据库表的字段和属性。
2. 在实体类中,标注 `@TableName` 注解,指定对应的数据库表名。
3. 在实体类中,使用 `@TableId` 注解标注主键字段,并设置 `@TableId(type = IdType.AUTO)`,表示使用数据库自增主键。
4. 调用 MyBatis Plus 提供的 `insert` 方法插入数据,插入成功后,自增 ID 将会被赋值到实体类对应的字段上。
以下是一个示例代码:
```java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public boolean saveUser(User user) {
return save(user);
}
}
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
// 省略 getter 和 setter
}
```
在上述示例中,`User` 类是一个实体类,对应数据库中的 `user` 表。`id` 字段使用 `@TableId(type = IdType.AUTO)` 注解标注为自增主键。
在 `UserServiceImpl` 类中,调用 `save` 方法插入数据,插入成功后,自增 ID 将会被赋值到 `user` 对象的 `id` 字段上。
你可以根据你的需求在 `UserServiceImpl` 类中添加其他方法,如查询、更新等。
使用mybatisplus同时插入主子表数据 且id为自增,controller入参dto对象无id属性
可以通过以下步骤实现使用MybatisPlus同时插入主子表数据且id为自增,Controller入参DTO对象无id属性:
1. 在主表和子表的实体类中,使用注解 `@TableId(type = IdType.AUTO)` 来设置主键自增。
2. 在主表和子表中,使用注解 `@TableField(exist = false)` 来设置DTO对象中不需要映射的属性。
3. 在DTO对象中,不需要设置id属性。
4. 在Controller中,使用 `@RequestBody` 注解将DTO对象作为参数传入。
5. 在Service中,使用 `save` 方法同时插入主表和子表数据。
下面是一个示例代码:
主表实体类:
```
@Data
@TableName("main_table")
public class MainEntity {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
}
```
子表实体类:
```
@Data
@TableName("sub_table")
public class SubEntity {
@TableId(type = IdType.AUTO)
private Long id;
private Long mainId;
private String subName;
}
```
DTO对象:
```
@Data
public class MainSubDTO {
private String name;
private List<SubDTO> subList;
}
@Data
public class SubDTO {
private String subName;
}
```
Controller:
```
@RestController
public class MainController {
@Autowired
private MainSubService mainSubService;
@PostMapping("/mainSub")
public void insertMainSub(@RequestBody MainSubDTO dto) {
mainSubService.insertMainSub(dto);
}
}
```
Service:
```
@Service
public class MainSubService {
@Autowired
private MainMapper mainMapper;
@Autowired
private SubMapper subMapper;
@Transactional(rollbackFor = Exception.class)
public void insertMainSub(MainSubDTO dto) {
MainEntity mainEntity = new MainEntity();
mainEntity.setName(dto.getName());
mainMapper.insert(mainEntity);
for (SubDTO subDTO : dto.getSubList()) {
SubEntity subEntity = new SubEntity();
subEntity.setMainId(mainEntity.getId());
subEntity.setSubName(subDTO.getSubName());
subMapper.insert(subEntity);
}
}
}
```