通用查询实体:
public class BaseQueryInfo {
private Integer pageNum;
private Integer pageSize;
private String orderBy;
private String orderType;
private String searchKey;
}
学生 DTO:
public class StudentQueryDTO extends BaseQueryInfo {
private String name;
private String age;
}
老师 DTO:
public class TeachQueryDTO extends BaseQueryInfo {
private String name;
private String age;
}
分页排序工具类: 这里应该如何设置入参参数,可以让其同时支持 TeachQueryDTO 和 StudentQueryDTO
public static void pageAndOrderBy(StudentQueryDTO studentDto) {
PageHelper.startPage(studentDto.getPageNum(), studentDto.getPageSize());
if (StringUtils.isNotBlank(studentDto.getOrderBy()) && StringUtils.isNotBlank(studentDto.getOrderType())) {
if (OrderType.DESC.getKey().equals(studentDto.getOrderType())) {
PageHelper.orderBy(studentDto.getOrderBy() + " desc");
} else if (OrderType.ASC.getKey().equals(studentDto.getOrderType())) {
PageHelper.orderBy(studentDto.getOrderBy());
}
}
}
```
1
Jooooooooo 2020-08-08 13:40:27 +08:00
没看懂问题
直接问了, 把参数从 StudentQueryDTO studentDto 改成 BaseQueryInfo queryInfo 的问题是? |
2
Vimax OP @Jooooooooo 不是,我让让`public static void pageAndOrderBy(StudentQueryDTO studentDto)`这个方法,同时支持继承了 BaseQueryInfo 的实体,做为参数。
比如: `public static void pageAndOrderBy(StudentQueryDTO studentDto)`, `public static void pageAndOrderBy(TeacherQueryDTO teacherDto)` 凡是后面继承了 BaseQueryInfo 的对象,都可以使用这个方法。public static void pageAndOrderBy(? ?) 不晓的? ?可以的应该如何定义,让其具备通用。 |
3
Jooooooooo 2020-08-08 13:52:50 +08:00 1
? ? 写成 BaseQueryInfo queryInfo 会怎么样?
|
4
6IbA2bj5ip3tK49j 2020-08-08 14:40:11 +08:00
Java 的“面向对象”,“设计模式”学魔怔了吗。直接用 BaseQueryInfo 作为传参不就完了?
而且,有必要这样分 Teacher 和 Student 吗? |
5
Sharuru 2020-08-08 14:56:13 +08:00 1
泛型通配符可以了解一下。
<T extends BaseQueryInfo> |
6
serical 2020-08-08 15:34:11 +08:00 1
public static <T, R extends Comparable<R>> T[] sort(T[] array, Function<T, R> function) {
Arrays.stream(array) .sorted(Comparator.comparing(function)) .collect(Collectors.toList()).toArray(array); return array; } 具体的: https://blog.serical.net/object-sort |
7
aguesuka 2020-08-08 17:01:54 +08:00 1
public class BaseQueryInfo<T extends BaseQueryInfo> {
private Integer pageNum; private Integer pageSize; private String orderBy; private String orderType; private String searchKey; public void pageAndOrderBy(T studentDto) { PageHelper.startPage(studentDto.getPageNum(), studentDto.getPageSize()); if (StringUtils.isNotBlank(studentDto.getOrderBy()) && StringUtils.isNotBlank(studentDto.getOrderType())) { if (OrderType.DESC.getKey().equals(studentDto.getOrderType())) { PageHelper.orderBy(studentDto.getOrderBy() + " desc"); } else if (OrderType.ASC.getKey().equals(studentDto.getOrderType())) { PageHelper.orderBy(studentDto.getOrderBy()); } } } } |
8
Vimax OP @xgfan ```有必要这样分 Teacher 和 Student 吗```,可以具体说说吗?
上面的 teacher 和 student 是个例子,比如我业务中有很多对象都需要做分页查询,对象里的属性都不相一样。如果不用对象 queryDTO 继承分页排序实体,请教如何写比较好?谢谢。 |
10
Kirsk 2020-08-08 18:31:03 +08:00 via Android 2
写一个分页类 把你的数据对象 set 进去 比如 T data setdata 用泛型 网上太多了 百度下就有 继承能少用就别用 灵活性比组件差多了
|
11
Vimax OP |
13
Kirsk 2020-08-09 08:10:18 +08:00 via Android
@Vimax 昨天没有细看 如果都是单表查且数据对象只作为查询条件 那就不需要泛型了 用数组就行 然后用动态查 组织好条件。如果不是就用泛型 将 data 的数据转成对应的类 这一步比较恶心
|
14
Kirsk 2020-08-09 08:12:36 +08:00 via Android
噢 没法用数组忘了是对象 比较好的解决办法就是动态查了
|