当前位置: 首页> 娱乐> 明星 > mybatis-plus——实现动态字段排序,根据实体获取字段映射数据库的具体字段

mybatis-plus——实现动态字段排序,根据实体获取字段映射数据库的具体字段

时间:2025/7/15 16:36:09来源:https://blog.csdn.net/monkeyhi/article/details/140799516 浏览次数:0次

前言

前端需要根据表头的点击控件可以排序,虽然前端能根据当前页的数据进行对应字段的排序,但也仅局限于实现当前页的排序,无法满足全部数据的排序,所以需要走接口的查询进行排序,获取最全的排序数据

实现方案

  1. 前端将排序的字段通过接口传入{"column":"dtCreateTime","order":"ASC"}
  2. 后端使用 mybatis-plus 的TableInfoHelper获取到字段映射的数据库字段
  3. 组装 order by 然后放置在LambdaQueryWrapper.last(orderSql)方法中

关键代码摘录

目前就简单考虑传入一个字段进行排序,多个可以使用逗号分隔等等,具体情况具体实现。

/**  * 根据查询条件拼接得到order by语句  * @param req 分页查询条件  * @return String  */public String getOrderByStatement(PageReq req) {  if (StringUtils.isNoneBlank(req.getColumn(), req.getOrder())) {  TableInfo tableInfo = TableInfoHelper.getTableInfo(EntityDemo.class);  List<TableFieldInfo> fieldList = tableInfo.getFieldList();  Optional<String> colum = fieldList.stream()  .filter(v -> StringUtils.equals(v.getEl(), req.getColumn()))  .findFirst()  .map(TableFieldInfo::getColumn);  if (colum.isPresent()) {  return String.format(" order by %s %s", colum.get(), req.getOrder());  }  }  return null;  
}

将上述的 order by 的 sql 放置在 LambdaQueryWrapper 生成的 sql 最后

String orderSql = getOrderByStatement(req);  
LambdaQueryWrapper<EntityDemo> queryWrapper = Wrappers.lambdaQuery(EntityDemo.class)  .查询条件 .last(StringUtils.isNotBlank(orderSql), orderSql);

总结

或许上面的方案不是比较好的方案,但是可以避免驼峰转换(数据库库区分字段大小写)和非表字段错误的情况。
上面并不是生产环境的代码,只是为了说明情况简化的代码。但核心还是TableInfoHelper,最后,祝各位玩的愉快。

关键字:mybatis-plus——实现动态字段排序,根据实体获取字段映射数据库的具体字段

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: