diff --git a/pom.xml b/pom.xml
index db8760e..915c948 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,8 @@
3.4.3
2024.0.1
7.0
+ 1.6.3
+ 1.5.0
@@ -39,6 +41,13 @@
${querydsl.version}
+
+ org.mapstruct
+ mapstruct
+ ${mapstruct.version}
+ compile
+
+
org.projectlombok
lombok
@@ -49,6 +58,12 @@
h2
test
+
+ io.github.linpeilie
+ mapstruct-plus-spring-boot-starter
+ ${mapstruct-plus.version}
+ test
+
@@ -113,6 +128,16 @@
jakarta.persistence-api
3.2.0
+
+ io.github.linpeilie
+ mapstruct-plus-processor
+ ${mapstruct-plus.version}
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ 0.2.0
+
-Aquerydsl.entityAccessors=true
diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/controller/SimpleControllerSupport.java b/src/main/java/com/lanyuanxiaoyao/service/template/controller/SimpleControllerSupport.java
index acd41a8..2c39c16 100644
--- a/src/main/java/com/lanyuanxiaoyao/service/template/controller/SimpleControllerSupport.java
+++ b/src/main/java/com/lanyuanxiaoyao/service/template/controller/SimpleControllerSupport.java
@@ -222,4 +222,8 @@ public abstract class SimpleControllerSupport 实体到详情项的转换函数
*/
protected abstract Function detailItemMapper();
+
+ public interface Mapper {
+ T map(S source) throws Exception;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java
index fef5ec1..fd01959 100644
--- a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java
+++ b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java
@@ -19,6 +19,7 @@ import java.util.List;
import java.util.Optional;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
+import org.mapstruct.Named;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
@@ -532,6 +533,7 @@ public abstract class SimpleServiceSupport implemen
* @param id 实体ID
* @return ENTITY 返回实体详情,不存在时返回null
*/
+ @Named("detail")
@Override
public ENTITY detail(Long id) {
return detailOptional(id).orElse(null);
@@ -547,6 +549,7 @@ public abstract class SimpleServiceSupport implemen
* @return ENTITY 返回实体详情
* @throws IdNotFoundException 当实体不存在时抛出
*/
+ @Named("detailOrThrow")
@Override
public ENTITY detailOrThrow(Long id) {
return detailOptional(id).orElseThrow(() -> new IdNotFoundException(id));
diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java b/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java
index f34132b..5eb3325 100644
--- a/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java
+++ b/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java
@@ -4,6 +4,7 @@ import com.blinkfox.fenix.EnableFenix;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.lanyuanxiaoyao.service.template.entity.Company;
import com.lanyuanxiaoyao.service.template.entity.Company_;
import com.lanyuanxiaoyao.service.template.entity.Employee;
import com.lanyuanxiaoyao.service.template.entity.Employee_;
@@ -11,6 +12,7 @@ import com.lanyuanxiaoyao.service.template.entity.QEmployee;
import com.lanyuanxiaoyao.service.template.entity.Report;
import com.lanyuanxiaoyao.service.template.entity.Report_;
import com.lanyuanxiaoyao.service.template.repository.EmployeeRepository;
+import io.github.linpeilie.annotations.ComponentModelConfig;
import jakarta.annotation.Resource;
import java.util.List;
import org.slf4j.Logger;
@@ -33,6 +35,7 @@ import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableFenix
@EnableJpaAuditing
+@ComponentModelConfig
public class TestApplication {
private static final Logger log = LoggerFactory.getLogger(TestApplication.class);
private static final String BASE_URL = "http://localhost:2490";
diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/controller/CompanyController.java b/src/test/java/com/lanyuanxiaoyao/service/template/controller/CompanyController.java
index 0f2ac73..6c89d8c 100644
--- a/src/test/java/com/lanyuanxiaoyao/service/template/controller/CompanyController.java
+++ b/src/test/java/com/lanyuanxiaoyao/service/template/controller/CompanyController.java
@@ -2,6 +2,8 @@ package com.lanyuanxiaoyao.service.template.controller;
import com.lanyuanxiaoyao.service.template.entity.Company;
import com.lanyuanxiaoyao.service.template.service.CompanyService;
+import io.github.linpeilie.Converter;
+import io.github.linpeilie.annotations.AutoMapper;
import java.time.LocalDateTime;
import java.util.function.Function;
import lombok.AllArgsConstructor;
@@ -15,39 +17,25 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("company")
public class CompanyController extends SimpleControllerSupport {
+ private static final Converter converter = new Converter();
+
public CompanyController(CompanyService service) {
super(service);
}
@Override
protected Function saveItemMapper() {
- return item -> {
- var company = new Company();
- company.setId(item.getId());
- company.setName(item.getName());
- company.setMembers(item.getMembers());
- return company;
- };
+ return item -> converter.convert(item, Company.class);
}
@Override
protected Function listItemMapper() {
- return company -> new ListItem(
- company.getId(),
- company.getName(),
- company.getMembers()
- );
+ return company -> converter.convert(company, ListItem.class);
}
@Override
protected Function detailItemMapper() {
- return company -> new DetailItem(
- company.getId(),
- company.getName(),
- company.getMembers(),
- company.getCreatedTime(),
- company.getModifiedTime()
- );
+ return company -> converter.convert(company, DetailItem.class);
}
@Setter
@@ -55,6 +43,7 @@ public class CompanyController extends SimpleControllerSupport {
- private final CompanyService companyService;
+ private final Converter converter = new Converter();
- public EmployeeController(EmployeeService service, CompanyService companyService) {
+ public EmployeeController(EmployeeService service) {
super(service);
- this.companyService = companyService;
}
@Override
protected Function saveItemMapper() {
- return item -> {
- var employee = new Employee();
- employee.setId(item.getId());
- employee.setName(item.getName());
- employee.setAge(item.getAge());
- employee.setRole(Employee.Role.USER);
- employee.setCompany(companyService.detailOrThrow(item.getCompanyId()));
- return employee;
- };
+ return item -> converter.convert(item, Employee.class);
}
@Override
protected Function listItemMapper() {
- return employee -> new ListItem(
- employee.getId(),
- employee.getName(),
- employee.getAge(),
- employee.getRole()
- );
+ return employee -> converter.convert(employee, ListItem.class);
}
@Override
protected Function detailItemMapper() {
- return employee -> new DetailItem(
- employee.getId(),
- employee.getCompany().getId(),
- employee.getName(),
- employee.getAge(),
- employee.getRole(),
- employee.getCreatedTime(),
- employee.getModifiedTime()
- );
+ return employee -> converter.convert(employee, DetailItem.class);
}
@Setter
@@ -64,11 +46,15 @@ public class EmployeeController extends SimpleControllerSupport {
+ private final Converter converter = new Converter();
private final EmployeeService employeeService;
public ReportController(ReportService service, EmployeeService employeeService) {
@@ -25,43 +31,24 @@ public class ReportController extends SimpleControllerSupport saveItemMapper() {
- return item -> {
- var report = new Report();
- report.setId(item.getId());
- report.setScore(item.getScore());
- report.setLevel(item.getLevel());
- report.setEmployeeId(item.getEmployeeId());
- return report;
- };
+ return item -> converter.convert(item, Report.class);
}
@Override
protected Function listItemMapper() {
+ var mapper = Mappers.getMapper(ListItem.Mapper.class);
return report -> {
var employee = employeeService.detailOrThrow(report.getEmployeeId());
- return new ListItem(
- report.getId(),
- employee.getId(),
- employee.getName(),
- report.getScore(),
- report.getLevel()
- );
+ return mapper.map(report, employee);
};
}
@Override
protected Function detailItemMapper() {
+ var mapper = Mappers.getMapper(DetailItem.Mapper.class);
return report -> {
var employee = employeeService.detailOrThrow(report.getEmployeeId());
- return new DetailItem(
- report.getId(),
- employee.getId(),
- employee.getName(),
- report.getScore(),
- report.getLevel(),
- report.getCreatedTime(),
- report.getModifiedTime()
- );
+ return mapper.map(report, employee);
};
}
@@ -70,6 +57,7 @@ public class ReportController extends SimpleControllerSupport