Mybatis ,Mybatis-plus列表多字段排序,包含sql以及warpper

文章介绍了如何在Java中利用Mybatis根据前端返回的多字段进行排序。首先,通过Util.handle方法将前端字段和数据库字段映射到Map中,然后使用getColumns方法获取转换后的排序字段。在查询时,根据排序字段和顺序(升序或降序)构建SQL的ORDERBY子句,最后将排序条件添加到queryWrapper中进行查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据 mybatis 根据多字段排序已经wrapper 根据多字段排序

首先根据咱们返回前端的数据列来规划好排序字段
如下:
在这里插入图片描述
这里的字段为返回VO的字段,要转换成数据库字段然后加入到排序中
示例,穿了 surname,cerRank 多字段,然后是倒序 false

在这里插入图片描述
首先创建好映射,如下代码,第一个List 为前端字段VO, 第二个List 为数据库字段。Util.handle 是将两个转换为map,然后就可以做映射啦。下面也写啦handle的方法。

    Map<String,String> SORTCOLUMNMAP =
            Util.handle(Arrays.asList("surname","idcardNum","cerCode","cerType","cerRank","permissionTime","expirationTime"),
                    Arrays.asList("surname","idcard_num","cer_code","cer_type","cer_rank","permission_time","expiration_time"));
    /**
     * 将两个list转换为Map
     * @author ZMH
     * @return Map<String, String>
     */
    public static Map<String, String> handle(List<String> list1, List<String> list2) {
        Map<String, String> map = IntStream.range(0, list1.size())
                .collect(HashMap::new, (m, i) -> m.put(list1.get(i), list2.get(i)), (m, n) -> {
        });
        return map;
    }

到这里之后我们就做一个转换的方法吧,然后这里测试如下,结果为surname,cer_rank 成功的改为了数据库字段,然后就可以加入到wrapper和sql 中啦。

    /**
     * 获取转换后的排序字
     * @author ZMH
     * @date 31/7/2023 2:13 下午
     */
    public static String getColumns (Map<String, String> sortColumnMap,String orderByColumns){
        List<String> orderByColumnList = Arrays.asList(orderByColumns.split(","));
        AtomicInteger i = new AtomicInteger();
        AtomicReference<String> columns = new AtomicReference<>("");
        orderByColumnList.forEach(
                column -> {
                    columns.set(columns.get()+sortColumnMap.get(column));
                    if (i.getAndIncrement() != (orderByColumnList.size()-1)) {
                        columns.set(columns.get()+",");
                    }
                });
        return columns.get();
    }

在这里插入图片描述

sql的话大家应该都知道怎么写,就不写sql的啦。写一个wrapper 的列子,如下:

        queryCondition(queryWrapper,dto);//查询条件封装的方法都是一些判断
        if (StringUtils.isNotBlank(dto.getOrderByColumns())){
            String order = dto.getOrderByAsc() ? "asc" : "desc";//正序倒序 
            String columns = Util.getColumns(baseMapper.SORTCOLUMNMAP, dto.getOrderByColumns());//获取数据库字段
            queryWrapper.last(" order by ".concat(columns).concat(" ").concat(order));//最后拼接到wrapper 里面就可以来啦.
        }else {
            queryWrapper.orderByDesc(GzhExamCertificate::getCerCode);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值