思路

采用 HandlerMethodArgumentResolver 预先对排序数据处理。

代码

MybatisPlusProperties
@ConfigurationProperties("mybatis-plus.page")
@Data
public class MybatisPlusProperties {/** 当前页字段 */private String keyCurrent="current";/** 分页记录数字段 */private String keySize = "size";/** 排序字段 */private String keyOrders = "orders";/** 正序字段 */private String keyAsc = "asc";/** 逆序字段 */private String keyDesc = "desc";/** 分隔符 */private String split = " ";/** 默认当前页 */private Long current = 1L;/** 默认分页记录数 */private Long size = 10L;/** 默认分页排序 */private boolean asc = false;/** 默认分页字段 */private String column = "sys_create_time";
}

application.yml

mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:logic-delete-field: sys_enable # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)type-enums-package: com.example.mvc.enumspage:current: 1size: 10column: sys_create_timeasc: false
CPageArgumentResolver
public class CPageArgumentResolver implements HandlerMethodArgumentResolver {public void setMybatisPlusProperties(MybatisPlusProperties mybatisPlusProperties) {this.mybatisPlusProperties = mybatisPlusProperties;}private MybatisPlusProperties mybatisPlusProperties;@Overridepublic boolean supportsParameter(MethodParameter parameter) {Class<?> type = parameter.getParameterType();return Page.class.isAssignableFrom(type);}@SuppressWarnings("rawtypes")@Overridepublic Object resolveArgument(MethodParameter parameter,ModelAndViewContainer mavContainer,NativeWebRequest webRequest,WebDataBinderFactory binderFactory) throws Exception {long current = mybatisPlusProperties.getCurrent();long size = mybatisPlusProperties.getSize();final String currentS = webRequest.getParameter(mybatisPlusProperties.getKeyCurrent());final String sizeS = webRequest.getParameter(mybatisPlusProperties.getKeySize());final String[] ordersS = Optional.ofNullable(webRequest.getParameterValues(mybatisPlusProperties.getKeyOrders())).orElse(new String[]{mybatisPlusProperties.getColumn()});if (!StringUtils.isBlank(currentS)&& ValidateUtil.isNumber(currentS)){current = Long.parseLong(currentS);}if (!StringUtils.isBlank(sizeS)&& ValidateUtil.isNumber(currentS)){size = Long.parseLong(sizeS);}List<OrderItem> orders = new ArrayList<>();for (String temp : ordersS) {final String[] s = temp.split(mybatisPlusProperties.getSplit());String column = mybatisPlusProperties.getColumn();boolean asc = mybatisPlusProperties.isAsc();if(s.length==2){if (mybatisPlusProperties.getKeyDesc().equalsIgnoreCase(s[1])){asc = false;}else if (mybatisPlusProperties.getKeyAsc().equalsIgnoreCase(s[1])){asc = true;}else {asc = mybatisPlusProperties.isAsc();}column = StringUtil.camelToUnderline(s[0]);}else if (s.length == 1){column = StringUtil.camelToUnderline(s[0]);}orders.add(new OrderItem(column, asc));}final Page page = new Page(current, size);page.setOrders(orders);return page;}
}
WebAppConfigure
@Configuration
public class WebAppConfigure implements WebMvcConfigurer {@Autowiredprivate MybatisPlusProperties mybatisPlusProperties;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {final CPageArgumentResolver cPageArgumentResolver = new CPageArgumentResolver();cPageArgumentResolver.setMybatisPlusProperties(mybatisPlusProperties);resolvers.add(cPageArgumentResolver);WebMvcConfigurer.super.addArgumentResolvers(resolvers);}
}
SysOperateLog
@Builder
@EqualsAndHashCode(callSuper = true)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_operate_log")
public class SysOperateLog implements Serializable {private static final long serialVersionUID = 3636265721933858877L;/**创建时间*/private String LocalDateTime sysCreateTime;
}
ISysOperateLogService
public interface ISysOperateLogService extends IService<SysOperateLog> {}
SysOperateLogServiceImpl
@Service
public class SysOperateLogServiceImpl extends ServiceImpl<SysOperateLogMapper, SysOperateLog> implements ISysOperateLogService {}
SysOperateLogController
@Controller
@RequestMapping("/sysOperateLog")
public class SysOperateLogController {final ISysOperateLogService logService;public SysOperateLogController(ISysOperateLogService logService) {this.logService = logService;}@ResponseBody@ResponseResult@GetMapping("/page")public Page<SysOperateLog> page(Page<SysOperateLog> page, SysOperateLog entity){QueryWrapper<SysOperateLog> queryWrapper = new QueryWrapper<SysOperateLog>();queryWrapper.setEntity(entity);return logService.page(page, queryWrapper);}
}

调用方式:

GET http://127.0.0.1:8080/sysOperateLog/page?current=2&size=10&orders=sysCreateTime asc

说明:

该案例默认在“MybatisPlusProperties”中进行了对“current”“page”“orders”字段和默认值进行了封装,并且可以在application.yml 中进行更改。默认使用sys_create_time(数据库字段)进行逆序排序,传递参数直接传 “orders=sysCreateTime asc”即可,支持传多个值,后端对进行驼峰转下滑线处理。

SQL日志:

SELECT sys_create_time FROM sys_operate_log ORDER BY sys_create_time ASC LIMIT 10,10

MybatisPlus 分页排序封装相关推荐

  1. jqGrid+FastJson+MybatisPlus快速开发分页排序和增删改查。

    框架介绍 jqGrid :是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信.支持json和xml数据和服务器交互,有很多自定义的功能,具体可以去看文档:http://blog ...

  2. mybatisplus page排序_MyBatisPlus分页的同时指定排序规则说明

    分页配置 MyBatis Plus要想使用分页,需要添加如下配置: @Configuration @ConditionalOnClass(value = {PaginationInterceptor. ...

  3. SpringBoot集成MyBatis-Plus分页插件

    1.说明 MyBatis使用分页查询功能, 需要配置分页插件, 如果没有配置, 则分页功能不生效. 2.分页查询API 下面列举了两个内置的分页查询API, 使用这些API时需要配置分页插件, 当然也 ...

  4. Spring Boot 学习[四] web项目实战训练(增删改查,分页,排序)

    Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等. 几点说明: Spring boot开发web项目,通常打成 ...

  5. mybatis-plus分页查询三种方法

    mybatis-plus分页查询 一.前期准备表 1.配置类 二.使用selectPage 1.Service 2.结果 三.使用2种分页查询的写法 1.xml 2.Mapper 3.第一种写法 4. ...

  6. MyBatisplus分页插件

    文章目录 一.后台分页配置 1. 配置分页插件 2. 编写分页代码 3. 测试 二.自定义查询 2.1. 自定义接口 2.2. 自定义查询 2.3. 测试自定义分页 一.后台分页配置 MyBatis ...

  7. MyBatis-Plus分页插件IPage的使用展示------分页查询

    使用了Mybatis-plus的分页插件----IPage: IPage 需要在dao层传入IPage的实现类Page对象,该对象实现了IPage IPage内部原理是基于拦截器,拦截的是方法以及方法 ...

  8. element ui +mybatisPlus分页插件实现分页功能

    elementui pagination插件 当然这里的依赖部分就需要去创库ctrl+v了 <!--分页部分 pagination插件 @current-change="handlep ...

  9. 若依框架以及Mybatis-plus分页插件失效,数据库有多条却只查前十条

    最近在若依的基础上开发,因为若依自带分页所以一直就没考虑数据分页,最近发现数据库明明有数据,却只能查出前10条. 首先分析原因,我是在原来代码的基础上,重新封装了vo类返回给前端,导致的分页失效,首先 ...

最新文章

  1. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍
  2. 数据告诉你,胡歌的微世界
  3. WebDriver自动化测试框架详解
  4. Java多线程编程-(4)-线程间通信机制的介绍与使用
  5. [html] 表单可以跨域吗?
  6. 蓝桥杯第八届省赛JAVA真题----包子凑数
  7. 蒙特卡罗方法—举例说明(C++、python)
  8. redis循环键_Redis 性能优化的 13 条军规!史上最全
  9. Tomcat配置和使用——详解
  10. java 杭电1237简单计算器
  11. day12【过渡】SpringCloud
  12. 百战程序员python900集资源_尚学堂百战程序员:盘点那些实用的Python代码
  13. LittleVGL-键盘控件
  14. 资产证券化为什么需要区块链技术?专访趣链科技揭开“区块链+ABS”迷雾
  15. 经典排序算法动图图解
  16. 25 个精美的手机网站模板
  17. 昨天的双十一你又剁手了吗?
  18. My findings:CoordConv坐标嵌入技术及其泛化性能
  19. 51单片机应用篇-- --智能门锁
  20. 液体混合装置plc控制系统 西门子1200仿真系统 包含程序和画面

热门文章

  1. 网络计算机win7为啥连不上,浅析win7旗舰版64位系统网络连接不上的解决方法
  2. vue组件走马灯_Vue-component | 文字走马灯组件
  3. dedecms后台报错“Notice: Use of undefined constant MYSQL_ASSOC - assumed ‘MYSQL_ASSOC‘ ”的解决方法
  4. 优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
  5. 服务器维护配件,服务器维修,服务器升级,服务器配件,磁盘柜维修及维护
  6. php 微信平台,【php】微信公众平台
  7. 搭建redis集群-(伪分布式)
  8. 铁甲雄兵显示服务器维护,铁甲雄兵正在获取服务器地址
  9. 网易云歌单添加到php,给自己的网站添加网易云音乐歌单吧^ ^
  10. 在win10中安装xp虚拟机的教程--win10专业版