当前使用版本(必填,否则不予处理)

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)
                )
            );
    }
}