使用mybatisplus同时插入主子表数据 且id为自增,controller入参dto对象无id属性
时间: 2024-02-02 07:08:00 浏览: 147
解析ABP框架中的数据传输对象与应用服务
可以通过以下步骤实现使用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);
}
}
}
```
阅读全文