From 6e2629a8b58e397f98657cc18f3d7426211b374f Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Fri, 15 Aug 2025 16:57:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=95=E5=85=A5lombok=E3=80=81queryd?= =?UTF-8?q?sl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 67 ++--- .../service/template/controller/Query.java | 273 ++---------------- .../controller/SimpleControllerSupport.java | 2 + .../controller/response/GlobalResponse.java | 39 +-- .../service/template/entity/IdOnlyEntity.java | 21 +- .../service/template/entity/SimpleEntity.java | 30 +- .../service/SimpleServiceSupport.java | 14 +- .../service/template/TestApplication.java | 13 + .../controller/CompanyController.java | 169 ++--------- .../controller/EmployeeController.java | 99 +++++++ .../service/template/entity/Company.java | 37 +-- .../service/template/entity/Employee.java | 53 ++++ .../repository/CompanyRepository.java | 4 - .../repository/EmployeeRepository.java | 15 + .../template/service/CompanyService.java | 8 - .../template/service/EmployeeService.java | 12 + 16 files changed, 311 insertions(+), 545 deletions(-) create mode 100644 src/test/java/com/lanyuanxiaoyao/service/template/controller/EmployeeController.java create mode 100644 src/test/java/com/lanyuanxiaoyao/service/template/entity/Employee.java create mode 100644 src/test/java/com/lanyuanxiaoyao/service/template/repository/EmployeeRepository.java create mode 100644 src/test/java/com/lanyuanxiaoyao/service/template/service/EmployeeService.java diff --git a/pom.xml b/pom.xml index 8b96e22..4ae925f 100644 --- a/pom.xml +++ b/pom.xml @@ -32,14 +32,6 @@ fenix-spring-boot-starter 3.1.0 - - - com.querydsl - querydsl-apt - ${querydsl.version} - provided - jakarta - com.querydsl querydsl-jpa @@ -47,6 +39,11 @@ jakarta + + org.projectlombok + lombok + + com.h2database h2 @@ -90,33 +87,33 @@ - com.mysema.maven - apt-maven-plugin - 1.1.3 - - - compile-dsl - compile - - process - - - com.querydsl.apt.jpa.JPAAnnotationProcessor - target/generated-sources/java - - - - test-compile-dsl - test-compile - - test-process - - - com.querydsl.apt.jpa.JPAAnnotationProcessor - target/generated-test-sources/java - - - + org.apache.maven.plugins + maven-compiler-plugin + 3.14.0 + + + + org.projectlombok + lombok + 1.18.36 + + + com.querydsl + querydsl-apt + ${querydsl.version} + jakarta + + + jakarta.persistence + jakarta.persistence-api + 3.2.0 + + + + -Aquerydsl.entityAccessors=true + -Aquerydsl.createDefaultVariable=true + + diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java b/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java index 1468bd5..2fbc78d 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java @@ -2,45 +2,21 @@ package com.lanyuanxiaoyao.service.template.controller; import java.util.List; import java.util.Map; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +@Setter +@Getter +@ToString public class Query { private Queryable query; private List sort; private Pageable page; - public Queryable getQuery() { - return query; - } - - public void setQuery(Queryable query) { - this.query = query; - } - - public List getSort() { - return sort; - } - - public void setSort(List sort) { - this.sort = sort; - } - - public Pageable getPage() { - return page; - } - - public void setPage(Pageable page) { - this.page = page; - } - - @Override - public String toString() { - return "Query{" + - "query=" + query + - ", sort=" + sort + - ", page=" + page + - '}'; - } - + @Setter + @Getter + @ToString public static class Queryable { private List nullEqual; private List notNullEqual; @@ -59,246 +35,33 @@ public class Query { private Map between; private Map notBetween; - public List getNullEqual() { - return nullEqual; - } - - public void setNullEqual(List nullEqual) { - this.nullEqual = nullEqual; - } - - public List getNotNullEqual() { - return notNullEqual; - } - - public void setNotNullEqual(List notNullEqual) { - this.notNullEqual = notNullEqual; - } - - public List getEmpty() { - return empty; - } - - public void setEmpty(List empty) { - this.empty = empty; - } - - public List getNotEmpty() { - return notEmpty; - } - - public void setNotEmpty(List notEmpty) { - this.notEmpty = notEmpty; - } - - public Map getEqual() { - return equal; - } - - public void setEqual(Map equal) { - this.equal = equal; - } - - public Map getNotEqual() { - return notEqual; - } - - public void setNotEqual(Map notEqual) { - this.notEqual = notEqual; - } - - public Map getLike() { - return like; - } - - public void setLike(Map like) { - this.like = like; - } - - public Map getNotLike() { - return notLike; - } - - public void setNotLike(Map notLike) { - this.notLike = notLike; - } - - public Map getGreat() { - return great; - } - - public void setGreat(Map great) { - this.great = great; - } - - public Map getLess() { - return less; - } - - public void setLess(Map less) { - this.less = less; - } - - public Map getGreatEqual() { - return greatEqual; - } - - public void setGreatEqual(Map greatEqual) { - this.greatEqual = greatEqual; - } - - public Map getLessEqual() { - return lessEqual; - } - - public void setLessEqual(Map lessEqual) { - this.lessEqual = lessEqual; - } - - public Map> getIn() { - return in; - } - - public void setIn(Map> in) { - this.in = in; - } - - public Map> getNotIn() { - return notIn; - } - - public void setNotIn(Map> notIn) { - this.notIn = notIn; - } - - public Map getBetween() { - return between; - } - - public void setBetween(Map between) { - this.between = between; - } - - public Map getNotBetween() { - return notBetween; - } - - public void setNotBetween(Map notBetween) { - this.notBetween = notBetween; - } - - @Override - public String toString() { - return "Queryable{" + - "nullEqual=" + nullEqual + - ", notNullEqual=" + notNullEqual + - ", empty=" + empty + - ", notEmpty=" + notEmpty + - ", equal=" + equal + - ", notEqual=" + notEqual + - ", like=" + like + - ", notLike=" + notLike + - ", great=" + great + - ", less=" + less + - ", greatEqual=" + greatEqual + - ", lessEqual=" + lessEqual + - ", in=" + in + - ", notIn=" + notIn + - ", between=" + between + - ", notBetween=" + notBetween + - '}'; - } - + @Setter + @Getter + @ToString public static class Between { private Object start; private Object end; - - public Object getStart() { - return start; - } - - public void setStart(Object start) { - this.start = start; - } - - public Object getEnd() { - return end; - } - - public void setEnd(Object end) { - this.end = end; - } - - @Override - public String toString() { - return "Between{" + - "start='" + start + '\'' + - ", end='" + end + '\'' + - '}'; - } } } + @Setter + @Getter + @ToString public static class Sortable { private String column; private Direction direction; - public String getColumn() { - return column; - } - - public void setColumn(String column) { - this.column = column; - } - - public Direction getDirection() { - return direction; - } - - public void setDirection(Direction direction) { - this.direction = direction; - } - - @Override - public String toString() { - return "Sortable{" + - "column='" + column + '\'' + - ", direction=" + direction + - '}'; - } - public enum Direction { ASC, DESC, } } + @Setter + @Getter + @ToString public static class Pageable { private Integer index; private Integer size; - - public Integer getIndex() { - return index; - } - - public void setIndex(Integer index) { - this.index = index; - } - - public Integer getSize() { - return size; - } - - public void setSize(Integer size) { - this.size = size; - } - - @Override - public String toString() { - return "Pageable{" + - "index=" + index + - ", size=" + size + - '}'; - } } } 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 77dc4a1..ec09fc5 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/controller/SimpleControllerSupport.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/controller/SimpleControllerSupport.java @@ -6,11 +6,13 @@ import com.lanyuanxiaoyao.service.template.entity.SimpleEntity; import com.lanyuanxiaoyao.service.template.helper.ObjectHelper; import com.lanyuanxiaoyao.service.template.service.SimpleServiceSupport; import java.util.List; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +@Slf4j public abstract class SimpleControllerSupport implements SimpleController { protected final SimpleServiceSupport service; diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/controller/response/GlobalResponse.java b/src/main/java/com/lanyuanxiaoyao/service/template/controller/response/GlobalResponse.java index 26bf039..e7bef4e 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/controller/response/GlobalResponse.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/controller/response/GlobalResponse.java @@ -1,7 +1,13 @@ package com.lanyuanxiaoyao.service.template.controller.response; import java.util.Map; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +@Setter +@Getter +@ToString public class GlobalResponse { private static final int SUCCESS_STATUS = 0; private static final int ERROR_STATUS = 500; @@ -96,37 +102,4 @@ public class GlobalResponse { response.setDetail(detail); return response; } - - public Integer getStatus() { - return status; - } - - public void setStatus(Integer status) { - this.status = status; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - - @Override - public String toString() { - return "AmisResponse{" + - "status=" + status + - ", message='" + message + '\'' + - ", data=" + data + - '}'; - } } diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/entity/IdOnlyEntity.java b/src/main/java/com/lanyuanxiaoyao/service/template/entity/IdOnlyEntity.java index 328bf26..020657b 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/entity/IdOnlyEntity.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/entity/IdOnlyEntity.java @@ -4,9 +4,15 @@ import com.blinkfox.fenix.id.SnowflakeId; import jakarta.persistence.EntityListeners; import jakarta.persistence.Id; import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; import org.hibernate.annotations.Comment; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +@Getter +@Setter +@ToString @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class IdOnlyEntity { @@ -14,19 +20,4 @@ public class IdOnlyEntity { @SnowflakeId @Comment("记录唯一标记") private Long id; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - @Override - public String toString() { - return "IdOnlyEntity{" + - "id=" + id + - '}'; - } } diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/entity/SimpleEntity.java b/src/main/java/com/lanyuanxiaoyao/service/template/entity/SimpleEntity.java index a12e1e3..0a31a44 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/entity/SimpleEntity.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/entity/SimpleEntity.java @@ -3,11 +3,17 @@ package com.lanyuanxiaoyao.service.template.entity; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; import org.hibernate.annotations.Comment; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +@Getter +@Setter +@ToString(callSuper = true) @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class SimpleEntity extends IdOnlyEntity { @@ -17,28 +23,4 @@ public class SimpleEntity extends IdOnlyEntity { @LastModifiedDate @Comment("记录更新时间") private LocalDateTime modifiedTime; - - public LocalDateTime getCreatedTime() { - return createdTime; - } - - public void setCreatedTime(LocalDateTime createdTime) { - this.createdTime = createdTime; - } - - public LocalDateTime getModifiedTime() { - return modifiedTime; - } - - public void setModifiedTime(LocalDateTime modifiedTime) { - this.modifiedTime = modifiedTime; - } - - @Override - public String toString() { - return "SimpleEntity{" + - "createdTime=" + createdTime + - ", modifiedTime=" + modifiedTime + - "} " + super.toString(); - } } 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 0516b2c..5803e82 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java @@ -15,15 +15,13 @@ import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +@Slf4j public abstract class SimpleServiceSupport implements SimpleService { - private static final Logger log = LoggerFactory.getLogger(SimpleServiceSupport.class); private static final Integer DEFAULT_PAGE_INDEX = 1; private static final Integer DEFAULT_PAGE_SIZE = 10; protected final SimpleRepository repository; @@ -35,13 +33,7 @@ public abstract class SimpleServiceSupport implemen @Transactional(rollbackOn = Throwable.class) @Override public Long save(ENTITY entity) { - if (ObjectHelper.isNotNull(entity.getId())) { - var id = entity.getId(); - var targetEntity = repository.findById(entity.getId()).orElseThrow(() -> new IdNotFoundException(id)); - BeanUtils.copyProperties(entity, targetEntity, "id", "createdTime", "modifiedTime"); - entity = targetEntity; - } - entity = repository.save(entity); + entity = repository.saveOrUpdateByNotNullProperties(entity); return entity.getId(); } diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java b/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java index 5595537..84da087 100644 --- a/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java +++ b/src/test/java/com/lanyuanxiaoyao/service/template/TestApplication.java @@ -111,6 +111,19 @@ public class TestApplication { log.info(listItems("company").toPrettyString()); + var eid1 = saveItem("employee", "{\"name\": \"Tom\",\"age\": 18, \"companyId\": %d}".formatted(cid1)).get("data").asLong(); + var eid2 = saveItem("employee", "{\"name\": \"Jerry\",\"age\": 18, \"companyId\": %d}".formatted(cid1)).get("data").asLong(); + var eid3 = saveItem("employee", "{\"name\": \"Mike\",\"age\": 18, \"companyId\": %d}".formatted(cid2)).get("data").asLong(); + + var employees = listItems("employee"); + Assert.isTrue(employees.at("/data/items").size() == 3, "数量错误"); + Assert.isTrue(employees.at("/data/total").asLong() == 3, "返回数量错误"); + + var employee1 = detailItem("employee", eid1); + Assert.isTrue(eid1 == employee1.at("/data/id").asLong(), "id错误"); + Assert.isTrue("Tom".equals(employee1.at("/data/name").asText()), "name错误"); + Assert.isTrue(18 == employee1.at("/data/age").asInt(), "age错误"); + System.exit(0); } 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 bbe156e..4e51fa1 100644 --- a/src/test/java/com/lanyuanxiaoyao/service/template/controller/CompanyController.java +++ b/src/test/java/com/lanyuanxiaoyao/service/template/controller/CompanyController.java @@ -3,13 +3,14 @@ package com.lanyuanxiaoyao.service.template.controller; import com.lanyuanxiaoyao.service.template.entity.Company; import com.lanyuanxiaoyao.service.template.service.CompanyService; import java.time.LocalDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -/** - * @author lanyuanxiaoyao - * @version 20250814 - */ @RestController @RequestMapping("company") public class CompanyController extends SimpleControllerSupport { @@ -30,162 +31,56 @@ public class CompanyController extends SimpleControllerSupport listItemMapper() { - return company -> { - var item = new ListItem(); - item.setId(company.getId()); - item.setName(company.getName()); - item.setMembers(company.getMembers()); - return item; - }; + return company -> new ListItem( + company.getId(), + company.getName(), + company.getMembers() + ); } @Override protected DetailItemMapper detailItemMapper() { - return company -> { - var item = new DetailItem(); - item.setId(company.getId()); - item.setName(company.getName()); - item.setMembers(company.getMembers()); - item.setCreatedTime(company.getCreatedTime()); - item.setModifiedTime(company.getModifiedTime()); - return item; - }; + return company -> new DetailItem( + company.getId(), + company.getName(), + company.getMembers(), + company.getCreatedTime(), + company.getModifiedTime() + ); } + @Setter + @Getter + @ToString + @AllArgsConstructor + @NoArgsConstructor public static class SaveItem { private Long id; private String name; private Integer members; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getMembers() { - return members; - } - - public void setMembers(Integer members) { - this.members = members; - } - - @Override - public String toString() { - return "SaveItem{" + - "id=" + id + - ", name='" + name + '\'' + - ", members=" + members + - '}'; - } } + @Setter + @Getter + @ToString + @AllArgsConstructor + @NoArgsConstructor public static class ListItem { private Long id; private String name; private Integer members; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getMembers() { - return members; - } - - public void setMembers(Integer members) { - this.members = members; - } - - @Override - public String toString() { - return "ListItem{" + - "id=" + id + - ", name='" + name + '\'' + - ", members=" + members + - '}'; - } } + @Setter + @Getter + @ToString + @AllArgsConstructor + @NoArgsConstructor public static class DetailItem { private Long id; private String name; private Integer members; private LocalDateTime createdTime; private LocalDateTime modifiedTime; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getMembers() { - return members; - } - - public void setMembers(Integer members) { - this.members = members; - } - - public LocalDateTime getCreatedTime() { - return createdTime; - } - - public void setCreatedTime(LocalDateTime createdTime) { - this.createdTime = createdTime; - } - - public LocalDateTime getModifiedTime() { - return modifiedTime; - } - - public void setModifiedTime(LocalDateTime modifiedTime) { - this.modifiedTime = modifiedTime; - } - - @Override - public String toString() { - return "DetailItem{" + - "id=" + id + - ", name='" + name + '\'' + - ", members=" + members + - ", createdTime=" + createdTime + - ", modifiedTime=" + modifiedTime + - '}'; - } } } diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/controller/EmployeeController.java b/src/test/java/com/lanyuanxiaoyao/service/template/controller/EmployeeController.java new file mode 100644 index 0000000..0248e94 --- /dev/null +++ b/src/test/java/com/lanyuanxiaoyao/service/template/controller/EmployeeController.java @@ -0,0 +1,99 @@ +package com.lanyuanxiaoyao.service.template.controller; + +import com.lanyuanxiaoyao.service.template.entity.Employee; +import com.lanyuanxiaoyao.service.template.service.CompanyService; +import com.lanyuanxiaoyao.service.template.service.EmployeeService; +import java.time.LocalDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("employee") +public class EmployeeController extends SimpleControllerSupport { + private final CompanyService companyService; + + public EmployeeController(EmployeeService service, CompanyService companyService) { + super(service); + this.companyService = companyService; + } + + @Override + protected SaveItemMapper 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; + }; + } + + @Override + protected ListItemMapper listItemMapper() { + return employee -> new ListItem( + employee.getId(), + employee.getName(), + employee.getAge(), + employee.getRole() + ); + } + + @Override + protected DetailItemMapper detailItemMapper() { + return employee -> new DetailItem( + employee.getId(), + employee.getCompany().getId(), + employee.getName(), + employee.getAge(), + employee.getRole(), + employee.getCreatedTime(), + employee.getModifiedTime() + ); + } + + @Setter + @Getter + @ToString + @AllArgsConstructor + @NoArgsConstructor + public static class SaveItem { + private Long id; + private Long companyId; + private String name; + private Integer age; + } + + @Setter + @Getter + @ToString + @AllArgsConstructor + @NoArgsConstructor + public static class ListItem { + private Long id; + private String name; + private Integer age; + private Employee.Role role; + } + + @Setter + @Getter + @ToString + @AllArgsConstructor + @NoArgsConstructor + public static class DetailItem { + private Long id; + private Long companyId; + private String name; + private Integer age; + private Employee.Role role; + private LocalDateTime createdTime; + private LocalDateTime modifiedTime; + } +} diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/entity/Company.java b/src/test/java/com/lanyuanxiaoyao/service/template/entity/Company.java index c1a0a82..e593ede 100644 --- a/src/test/java/com/lanyuanxiaoyao/service/template/entity/Company.java +++ b/src/test/java/com/lanyuanxiaoyao/service/template/entity/Company.java @@ -1,42 +1,33 @@ package com.lanyuanxiaoyao.service.template.entity; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EntityListeners; +import jakarta.persistence.OneToMany; +import java.util.Set; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; import org.hibernate.annotations.Comment; import org.hibernate.annotations.DynamicUpdate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +@Setter +@Getter +@ToString(callSuper = true) @Entity @DynamicUpdate @EntityListeners(AuditingEntityListener.class) @Comment("企业") public class Company extends SimpleEntity { + @Column(nullable = false) @Comment("名称") private String name; + @Column(nullable = false) @Comment("成员数") private Integer members; - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getMembers() { - return members; - } - - public void setMembers(Integer members) { - this.members = members; - } - - @Override - public String toString() { - return "Company{" + - "name='" + name + '\'' + - ", members=" + members + - "} " + super.toString(); - } + @OneToMany(mappedBy = "company") + @ToString.Exclude + private Set employees; } diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/entity/Employee.java b/src/test/java/com/lanyuanxiaoyao/service/template/entity/Employee.java new file mode 100644 index 0000000..4fa6b67 --- /dev/null +++ b/src/test/java/com/lanyuanxiaoyao/service/template/entity/Employee.java @@ -0,0 +1,53 @@ +package com.lanyuanxiaoyao.service.template.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.ConstraintMode; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.ForeignKey; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.NamedAttributeNode; +import jakarta.persistence.NamedEntityGraph; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.Comment; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@Setter +@Getter +@ToString(callSuper = true) +@Entity +@DynamicUpdate +@EntityListeners(AuditingEntityListener.class) +@NamedEntityGraph(name = "employee.detail", attributeNodes = { + @NamedAttributeNode("company") +}) +@Comment("员工") +public class Employee extends SimpleEntity { + @Column(nullable = false) + @Comment("名称") + private String name; + @Column(nullable = false) + @Comment("年龄") + private Integer age; + @Column(nullable = false) + @Enumerated(EnumType.STRING) + @Comment("角色") + private Role role; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(nullable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) + @ToString.Exclude + private Company company; + + public enum Role { + USER, + ADMIN, + } +} diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/repository/CompanyRepository.java b/src/test/java/com/lanyuanxiaoyao/service/template/repository/CompanyRepository.java index 8c374f8..0424ee3 100644 --- a/src/test/java/com/lanyuanxiaoyao/service/template/repository/CompanyRepository.java +++ b/src/test/java/com/lanyuanxiaoyao/service/template/repository/CompanyRepository.java @@ -3,10 +3,6 @@ package com.lanyuanxiaoyao.service.template.repository; import com.lanyuanxiaoyao.service.template.entity.Company; import org.springframework.stereotype.Repository; -/** - * @author lanyuanxiaoyao - * @version 20250814 - */ @Repository public interface CompanyRepository extends SimpleRepository { } diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/repository/EmployeeRepository.java b/src/test/java/com/lanyuanxiaoyao/service/template/repository/EmployeeRepository.java new file mode 100644 index 0000000..1c0266f --- /dev/null +++ b/src/test/java/com/lanyuanxiaoyao/service/template/repository/EmployeeRepository.java @@ -0,0 +1,15 @@ +package com.lanyuanxiaoyao.service.template.repository; + +import com.lanyuanxiaoyao.service.template.entity.Employee; +import java.util.Optional; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.stereotype.Repository; + +@SuppressWarnings("NullableProblems") +@Repository +public interface EmployeeRepository extends SimpleRepository { + @EntityGraph(value = "employee.detail", type = EntityGraph.EntityGraphType.FETCH) + @Override + Optional findOne(Specification specification); +} diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/service/CompanyService.java b/src/test/java/com/lanyuanxiaoyao/service/template/service/CompanyService.java index a63f585..88af78d 100644 --- a/src/test/java/com/lanyuanxiaoyao/service/template/service/CompanyService.java +++ b/src/test/java/com/lanyuanxiaoyao/service/template/service/CompanyService.java @@ -4,17 +4,9 @@ import com.lanyuanxiaoyao.service.template.entity.Company; import com.lanyuanxiaoyao.service.template.repository.CompanyRepository; import org.springframework.stereotype.Service; -/** - * @author lanyuanxiaoyao - * @version 20250814 - */ @Service public class CompanyService extends SimpleServiceSupport { public CompanyService(CompanyRepository repository) { super(repository); } - - public void test() { - - } } diff --git a/src/test/java/com/lanyuanxiaoyao/service/template/service/EmployeeService.java b/src/test/java/com/lanyuanxiaoyao/service/template/service/EmployeeService.java new file mode 100644 index 0000000..3b3d0a9 --- /dev/null +++ b/src/test/java/com/lanyuanxiaoyao/service/template/service/EmployeeService.java @@ -0,0 +1,12 @@ +package com.lanyuanxiaoyao.service.template.service; + +import com.lanyuanxiaoyao.service.template.entity.Employee; +import com.lanyuanxiaoyao.service.template.repository.EmployeeRepository; +import org.springframework.stereotype.Service; + +@Service +public class EmployeeService extends SimpleServiceSupport { + public EmployeeService(EmployeeRepository repository) { + super(repository); + } +}