mapstruct两个表数据转入联表
时间: 2024-12-30 13:25:46 浏览: 35
### 使用 MapStruct 将两个表的数据转换为联表
为了实现将两个表的数据通过 MapStruct 转换并合并到一个新的对象中,在 Java 中通常会定义映射接口来指定源实体类和目标DTO之间的关系。假设存在 `TableA` 和 `TableB` 两张表,以及一个用于表示这两张表联合后的数据传输对象 (DTO) —— `JoinedTableDto`。
#### 定义实体类
首先创建代表数据库表格的对象模型:
```java
public class TableA {
private Long id;
private String name;
// getters and setters...
}
public class TableB {
private Long id;
private Integer value;
private Long tableAId; // 外键关联字段
// getters and setters...
}
```
接着设计 DTO 类用来承载组合之后的信息:
```java
public class JoinedTableDto {
private Long idFromA;
private String nameFromA;
private List<Integer> valuesFromB;
// constructors, getters and setters...
public JoinedTableDto(Long idFromA, String nameFromA){
this.idFromA = idFromA;
this.nameFromA = nameFromA;
this.valuesFromB = new ArrayList<>();
}
}
```
#### 创建 Mapper 接口
利用 MapStruct 来编写自定义的映射逻辑,可以如下所示设置 mapper 接口:
```java
@Mapper(componentModel = "spring", uses = {})
public interface TablesToJoinMapper {
@Mapping(target = "idFromA", source = "tableA.id")
@Mapping(target = "nameFromA", source = "tableA.name")
default JoinedTableDto map(TableA tableA, Collection<TableB> relatedBs) {
JoinedTableDto dto = JoinedTableDto.of(tableA.getId(), tableA.getName());
if(relatedBs != null && !relatedBs.isEmpty()){
for(TableB b : relatedBs){
dto.getValuesFromB().add(b.getValue());
}
}
return dto;
}
}
```
上述代码片段展示了如何配置 MapStruct 的映射器以处理来自不同表的数据,并将其整合进单个 DTO 实例中[^1]。
当需要执行反向操作或将更多复杂的业务规则应用于映射过程时,可以在 `TablesToJoinMapper` 接口中进一步扩展方法签名或引入辅助函数。
阅读全文
相关推荐













