feat: 增加query查询测试
This commit is contained in:
@@ -50,10 +50,10 @@ public class Query {
|
|||||||
private Map<String, Object> notEqual;
|
private Map<String, Object> notEqual;
|
||||||
private Map<String, String> like;
|
private Map<String, String> like;
|
||||||
private Map<String, String> notLike;
|
private Map<String, String> notLike;
|
||||||
private Map<String, Comparable<Object>> great;
|
private Map<String, Object> great;
|
||||||
private Map<String, Comparable<Object>> less;
|
private Map<String, Object> less;
|
||||||
private Map<String, Comparable<Object>> greatEqual;
|
private Map<String, Object> greatEqual;
|
||||||
private Map<String, Comparable<Object>> lessEqual;
|
private Map<String, Object> lessEqual;
|
||||||
private Map<String, List<Object>> in;
|
private Map<String, List<Object>> in;
|
||||||
private Map<String, List<Object>> notIn;
|
private Map<String, List<Object>> notIn;
|
||||||
private Map<String, Between> between;
|
private Map<String, Between> between;
|
||||||
@@ -123,35 +123,35 @@ public class Query {
|
|||||||
this.notLike = notLike;
|
this.notLike = notLike;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Comparable<Object>> getGreat() {
|
public Map<String, Object> getGreat() {
|
||||||
return great;
|
return great;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGreat(Map<String, Comparable<Object>> great) {
|
public void setGreat(Map<String, Object> great) {
|
||||||
this.great = great;
|
this.great = great;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Comparable<Object>> getLess() {
|
public Map<String, Object> getLess() {
|
||||||
return less;
|
return less;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLess(Map<String, Comparable<Object>> less) {
|
public void setLess(Map<String, Object> less) {
|
||||||
this.less = less;
|
this.less = less;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Comparable<Object>> getGreatEqual() {
|
public Map<String, Object> getGreatEqual() {
|
||||||
return greatEqual;
|
return greatEqual;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGreatEqual(Map<String, Comparable<Object>> greatEqual) {
|
public void setGreatEqual(Map<String, Object> greatEqual) {
|
||||||
this.greatEqual = greatEqual;
|
this.greatEqual = greatEqual;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Comparable<Object>> getLessEqual() {
|
public Map<String, Object> getLessEqual() {
|
||||||
return lessEqual;
|
return lessEqual;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLessEqual(Map<String, Comparable<Object>> lessEqual) {
|
public void setLessEqual(Map<String, Object> lessEqual) {
|
||||||
this.lessEqual = lessEqual;
|
this.lessEqual = lessEqual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
if (ObjectHelper.isNotNull(entity.getId())) {
|
if (ObjectHelper.isNotNull(entity.getId())) {
|
||||||
var id = entity.getId();
|
var id = entity.getId();
|
||||||
var targetEntity = repository.findById(entity.getId()).orElseThrow(() -> new IdNotFoundException(id));
|
var targetEntity = repository.findById(entity.getId()).orElseThrow(() -> new IdNotFoundException(id));
|
||||||
BeanUtils.copyProperties(entity, targetEntity, "id", "created_time", "modified_time");
|
BeanUtils.copyProperties(entity, targetEntity, "id", "createdTime", "modifiedTime");
|
||||||
entity = targetEntity;
|
entity = targetEntity;
|
||||||
}
|
}
|
||||||
entity = repository.save(entity);
|
entity = repository.save(entity);
|
||||||
@@ -107,6 +107,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
protected List<Predicate> queryPredicates(Query.Queryable queryable, Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
protected List<Predicate> queryPredicates(Query.Queryable queryable, Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||||
var predicates = new ArrayList<Predicate>();
|
var predicates = new ArrayList<Predicate>();
|
||||||
if (ObjectHelper.isNull(queryable)) {
|
if (ObjectHelper.isNull(queryable)) {
|
||||||
@@ -116,7 +117,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
queryable.getNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column))));
|
queryable.getNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column))));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getNotNullEqual())) {
|
if (ObjectHelper.isNotEmpty(queryable.getNotNullEqual())) {
|
||||||
queryable.getNotNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column))));
|
queryable.getNotNullEqual().forEach(column -> predicates.add(builder.isNotNull(column(root, column))));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getEmpty())) {
|
if (ObjectHelper.isNotEmpty(queryable.getEmpty())) {
|
||||||
queryable.getEmpty().forEach(column -> predicates.add(builder.isEmpty(column(root, column))));
|
queryable.getEmpty().forEach(column -> predicates.add(builder.isEmpty(column(root, column))));
|
||||||
@@ -143,16 +144,16 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
queryable.getNotLike().forEach((column, value) -> predicates.add(builder.notLike(column(root, column), value)));
|
queryable.getNotLike().forEach((column, value) -> predicates.add(builder.notLike(column(root, column), value)));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getGreat())) {
|
if (ObjectHelper.isNotEmpty(queryable.getGreat())) {
|
||||||
queryable.getGreat().forEach((column, value) -> predicates.add(builder.greaterThan(column(root, column), value)));
|
queryable.getGreat().forEach((column, value) -> predicates.add(builder.greaterThan(column(root, column), (Comparable<Object>) value)));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getLess())) {
|
if (ObjectHelper.isNotEmpty(queryable.getLess())) {
|
||||||
queryable.getLess().forEach((column, value) -> predicates.add(builder.lessThan(column(root, column), value)));
|
queryable.getLess().forEach((column, value) -> predicates.add(builder.lessThan(column(root, column), (Comparable<Object>) value)));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getGreatEqual())) {
|
if (ObjectHelper.isNotEmpty(queryable.getGreatEqual())) {
|
||||||
queryable.getGreatEqual().forEach((column, value) -> predicates.add(builder.greaterThanOrEqualTo(column(root, column), value)));
|
queryable.getGreatEqual().forEach((column, value) -> predicates.add(builder.greaterThanOrEqualTo(column(root, column), (Comparable<Object>) value)));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getLessEqual())) {
|
if (ObjectHelper.isNotEmpty(queryable.getLessEqual())) {
|
||||||
queryable.getLessEqual().forEach((column, value) -> predicates.add(builder.lessThanOrEqualTo(column(root, column), value)));
|
queryable.getLessEqual().forEach((column, value) -> predicates.add(builder.lessThanOrEqualTo(column(root, column), (Comparable<Object>) value)));
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getIn())) {
|
if (ObjectHelper.isNotEmpty(queryable.getIn())) {
|
||||||
queryable.getIn().forEach((column, value) -> predicates.add(builder.in(column(root, column)).value(value)));
|
queryable.getIn().forEach((column, value) -> predicates.add(builder.in(column(root, column)).value(value)));
|
||||||
@@ -175,12 +176,12 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<ENTITY> list(Query listQuery) {
|
public Page<ENTITY> list(Query listQuery) {
|
||||||
var pageRequest = PageRequest.of(DEFAULT_PAGE_INDEX - 1, DEFAULT_PAGE_SIZE, Sort.by("created_time").descending());
|
var pageRequest = PageRequest.of(DEFAULT_PAGE_INDEX - 1, DEFAULT_PAGE_SIZE, Sort.by("createdTime").descending());
|
||||||
if (ObjectHelper.isNotNull(listQuery.getPage())) {
|
if (ObjectHelper.isNotNull(listQuery.getPage())) {
|
||||||
pageRequest = PageRequest.of(
|
pageRequest = PageRequest.of(
|
||||||
ObjectHelper.defaultIfNull(listQuery.getPage().getIndex(), DEFAULT_PAGE_INDEX) - 1,
|
ObjectHelper.defaultIfNull(listQuery.getPage().getIndex(), DEFAULT_PAGE_INDEX) - 1,
|
||||||
ObjectHelper.defaultIfNull(listQuery.getPage().getSize(), DEFAULT_PAGE_SIZE),
|
ObjectHelper.defaultIfNull(listQuery.getPage().getSize(), DEFAULT_PAGE_SIZE),
|
||||||
Sort.by("create_time").descending()
|
Sort.by("createdTime").descending()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return repository.findAll(
|
return repository.findAll(
|
||||||
|
|||||||
@@ -37,15 +37,63 @@ public class TestApplication {
|
|||||||
@EventListener(ApplicationReadyEvent.class)
|
@EventListener(ApplicationReadyEvent.class)
|
||||||
public void runTests() throws JsonProcessingException {
|
public void runTests() throws JsonProcessingException {
|
||||||
// 增
|
// 增
|
||||||
var cid1 = saveItem("company", "{\"name\": \"Apple\"}").get("data").asLong();
|
var cid1 = saveItem("company", "{\"name\": \"Apple\",\"members\": 10}").get("data").asLong();
|
||||||
var cid2 = saveItem("company", "{\"name\": \"Banana\"}").get("data").asLong();
|
var cid2 = saveItem("company", "{\"name\": \"Banana\",\"members\": 20}").get("data").asLong();
|
||||||
var cid3 = saveItem("company", "{\"name\": \"Cheery\"}").get("data").asLong();
|
var cid3 = saveItem("company", "{\"name\": \"Cheery\",\"members\": 20}").get("data").asLong();
|
||||||
|
|
||||||
// 查
|
// 查
|
||||||
var companies = listItems("company");
|
var companies = listItems("company");
|
||||||
Assert.isTrue(companies.at("/data/items").size() == 3, "数量错误");
|
Assert.isTrue(companies.at("/data/items").size() == 3, "数量错误");
|
||||||
Assert.isTrue(companies.at("/data/total").asLong() == 3, "返回数量错误");
|
Assert.isTrue(companies.at("/data/total").asLong() == 3, "返回数量错误");
|
||||||
|
|
||||||
|
// language=JSON
|
||||||
|
var companies2 = listItems("company", "{\n" +
|
||||||
|
" \"page\": {\n" +
|
||||||
|
" \"index\": 1,\n" +
|
||||||
|
" \"size\": 2\n" +
|
||||||
|
" }\n" +
|
||||||
|
"}");
|
||||||
|
Assert.isTrue(companies2.at("/data/items").size() == 2, "数量错误");
|
||||||
|
Assert.isTrue(companies2.at("/data/total").asLong() == 3, "返回数量错误");
|
||||||
|
// language=JSON
|
||||||
|
var companies3 = listItems("company", "{\n" +
|
||||||
|
" \"query\": {\n" +
|
||||||
|
" \"notNullEqual\": [\n" +
|
||||||
|
" \"name\"\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"equal\": {\n" +
|
||||||
|
" \"name\": \"Apple\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"like\": {\n" +
|
||||||
|
" \"name\": \"Appl%\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"less\": {\n" +
|
||||||
|
" \"members\": 50\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"greatEqual\": {\n" +
|
||||||
|
" \"members\": 0\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"in\": {\n" +
|
||||||
|
" \"name\": [\n" +
|
||||||
|
" \"Apple\",\n" +
|
||||||
|
" \"Banana\"\n" +
|
||||||
|
" ]\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"between\": {\n" +
|
||||||
|
" \"members\": {\n" +
|
||||||
|
" \"start\": 0,\n" +
|
||||||
|
" \"end\": 50\n" +
|
||||||
|
" }\n" +
|
||||||
|
" }\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"page\": {\n" +
|
||||||
|
" \"index\": 1,\n" +
|
||||||
|
" \"size\": 2\n" +
|
||||||
|
" }\n" +
|
||||||
|
"}");
|
||||||
|
Assert.isTrue(companies3.at("/data/items").size() == 1, "数量错误");
|
||||||
|
Assert.isTrue(companies3.at("/data/total").asLong() == 1, "返回数量错误");
|
||||||
|
|
||||||
var company1 = detailItem("company", cid1);
|
var company1 = detailItem("company", cid1);
|
||||||
Assert.isTrue(cid1 == company1.at("/data/id").asLong(), "id错误");
|
Assert.isTrue(cid1 == company1.at("/data/id").asLong(), "id错误");
|
||||||
Assert.isTrue("Apple".equals(company1.at("/data/name").asText()), "name错误");
|
Assert.isTrue("Apple".equals(company1.at("/data/name").asText()), "name错误");
|
||||||
@@ -91,6 +139,17 @@ public class TestApplication {
|
|||||||
return MAPPER.readTree(response.getBody());
|
return MAPPER.readTree(response.getBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JsonNode listItems(String path, String query) throws JsonProcessingException {
|
||||||
|
var response = REST_CLIENT.postForEntity(
|
||||||
|
"%s/%s/list".formatted(BASE_URL, path),
|
||||||
|
new HttpEntity<>(query, headers()),
|
||||||
|
String.class
|
||||||
|
);
|
||||||
|
Assert.isTrue(response.getStatusCode().is2xxSuccessful(), "请求失败");
|
||||||
|
Assert.notNull(response.getBody(), "请求失败");
|
||||||
|
return MAPPER.readTree(response.getBody());
|
||||||
|
}
|
||||||
|
|
||||||
private JsonNode detailItem(String path, Long id) throws JsonProcessingException {
|
private JsonNode detailItem(String path, Long id) throws JsonProcessingException {
|
||||||
var response = REST_CLIENT.getForEntity(
|
var response = REST_CLIENT.getForEntity(
|
||||||
"%s/%s/detail/%d".formatted(BASE_URL, path, id),
|
"%s/%s/detail/%d".formatted(BASE_URL, path, id),
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
var company = new Company();
|
var company = new Company();
|
||||||
company.setId(item.getId());
|
company.setId(item.getId());
|
||||||
company.setName(item.getName());
|
company.setName(item.getName());
|
||||||
|
company.setMembers(item.getMembers());
|
||||||
return company;
|
return company;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -33,6 +34,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
var item = new ListItem();
|
var item = new ListItem();
|
||||||
item.setId(company.getId());
|
item.setId(company.getId());
|
||||||
item.setName(company.getName());
|
item.setName(company.getName());
|
||||||
|
item.setMembers(company.getMembers());
|
||||||
return item;
|
return item;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -43,6 +45,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
var item = new DetailItem();
|
var item = new DetailItem();
|
||||||
item.setId(company.getId());
|
item.setId(company.getId());
|
||||||
item.setName(company.getName());
|
item.setName(company.getName());
|
||||||
|
item.setMembers(company.getMembers());
|
||||||
item.setCreatedTime(company.getCreatedTime());
|
item.setCreatedTime(company.getCreatedTime());
|
||||||
item.setModifiedTime(company.getModifiedTime());
|
item.setModifiedTime(company.getModifiedTime());
|
||||||
return item;
|
return item;
|
||||||
@@ -52,6 +55,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
public static class SaveItem {
|
public static class SaveItem {
|
||||||
private Long id;
|
private Long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
private Integer members;
|
||||||
|
|
||||||
public Long getId() {
|
public Long getId() {
|
||||||
return id;
|
return id;
|
||||||
@@ -69,11 +73,20 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(Integer members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "SaveItem{" +
|
return "SaveItem{" +
|
||||||
"id=" + id +
|
"id=" + id +
|
||||||
", name='" + name + '\'' +
|
", name='" + name + '\'' +
|
||||||
|
", members=" + members +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,6 +94,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
public static class ListItem {
|
public static class ListItem {
|
||||||
private Long id;
|
private Long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
private Integer members;
|
||||||
|
|
||||||
public Long getId() {
|
public Long getId() {
|
||||||
return id;
|
return id;
|
||||||
@@ -98,11 +112,20 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(Integer members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ListItem{" +
|
return "ListItem{" +
|
||||||
"id=" + id +
|
"id=" + id +
|
||||||
", name='" + name + '\'' +
|
", name='" + name + '\'' +
|
||||||
|
", members=" + members +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,6 +133,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
public static class DetailItem {
|
public static class DetailItem {
|
||||||
private Long id;
|
private Long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
private Integer members;
|
||||||
private LocalDateTime createdTime;
|
private LocalDateTime createdTime;
|
||||||
private LocalDateTime modifiedTime;
|
private LocalDateTime modifiedTime;
|
||||||
|
|
||||||
@@ -129,6 +153,14 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(Integer members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
public LocalDateTime getCreatedTime() {
|
public LocalDateTime getCreatedTime() {
|
||||||
return createdTime;
|
return createdTime;
|
||||||
}
|
}
|
||||||
@@ -150,6 +182,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
|||||||
return "DetailItem{" +
|
return "DetailItem{" +
|
||||||
"id=" + id +
|
"id=" + id +
|
||||||
", name='" + name + '\'' +
|
", name='" + name + '\'' +
|
||||||
|
", members=" + members +
|
||||||
", createdTime=" + createdTime +
|
", createdTime=" + createdTime +
|
||||||
", modifiedTime=" + modifiedTime +
|
", modifiedTime=" + modifiedTime +
|
||||||
'}';
|
'}';
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
|||||||
@Comment("企业")
|
@Comment("企业")
|
||||||
public class Company extends SimpleEntity {
|
public class Company extends SimpleEntity {
|
||||||
private String name;
|
private String name;
|
||||||
|
private Integer members;
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
@@ -22,10 +23,19 @@ public class Company extends SimpleEntity {
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(Integer members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Company{" +
|
return "Company{" +
|
||||||
"name='" + name + '\'' +
|
"name='" + name + '\'' +
|
||||||
|
", members=" + members +
|
||||||
"} " + super.toString();
|
"} " + super.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user