既然有tablefield注解为什么还需要dto类
时间: 2023-12-30 09:02:55 浏览: 81
虽然@TableField注解可以标识实体类中的属性是否为数据库表字段,但是在实际开发中,我们可能需要对实体类进行一些特殊的处理,例如属性值的转换、属性的合并等等。这时候,我们就可以使用DTO类来对实体类进行扩展,以满足业务需求。DTO类通常包含实体类中没有的属性,或者对实体类中的属性进行了一些特殊处理。同时,DTO类也可以用于数据传输,避免直接暴露实体类给前端或其他系统。因此,在实际开发中,DTO类是非常有用的。
相关问题
使用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);
}
}
}
```
阅读全文