当前使用版本(必填,否则不予处理)
3.5.6
能否在QueryWrapper和LambdaQueryWrapper中也增加Page.addOrder那样直接传OrderItem的方法, 排序条件从前台传来是字符串,处理成OrderItem以后只有Page能直接用,LambdaQueryWrapper也不能直接传字符串字段名, 一个表的查询条件封装成一个对象后,在有的地方会用分页有的地方不需要分页,导致现在要写三种样子的排序处理
public Page<T> handlerPage() {
Integer pageNum = ObjectUtils.defaultIfNull(this.pageNo, DEFAULT_PAGE_NUM);
Integer pageSize = ObjectUtils.defaultIfNull(this.pageSize, DEFAULT_PAGE_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize);
// 这里拼接了排序条件 就不能在wrapper中再拼,会重复
if (!sorted) {
sorted = true;
List<OrderItem> orderItems = handlerOrderItem();
Opt.ofEmptyAble(orderItems).ifPresent(page::addOrder);
}
return page;
}
protected void handlerWrapperSort(QueryWrapper<T> queryWrapper) {
if (!sorted) {
sorted = true;
List<OrderItem> orderItems = handlerOrderItem();
Opt.ofEmptyAble(orderItems).ifPresent(items -> items.forEach(item -> {
if (item.isAsc()) {
queryWrapper.orderByAsc(item.getColumn());
} else {
queryWrapper.orderByDesc(item.getColumn());
}
})
);
}
}
protected void handlerWrapperSort(LambdaQueryWrapper<T> queryWrapper) {
if (!sorted) {
sorted = true;
List<OrderItem> orderItems = handlerOrderItem();
MergeSegments expression = queryWrapper.getExpression();
Opt.ofEmptyAble(orderItems)
.ifPresent(items ->
items.forEach(item ->
expression.add(SqlKeyword.ORDER_BY, item::getColumn,
item.isAsc() ? SqlKeyword.ASC : SqlKeyword.DESC)
)
);
}
}