MybatisPlus 分页排序封装
思路
采用 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 分页排序封装相关推荐
- jqGrid+FastJson+MybatisPlus快速开发分页排序和增删改查。
框架介绍 jqGrid :是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信.支持json和xml数据和服务器交互,有很多自定义的功能,具体可以去看文档:http://blog ...
- mybatisplus page排序_MyBatisPlus分页的同时指定排序规则说明
分页配置 MyBatis Plus要想使用分页,需要添加如下配置: @Configuration @ConditionalOnClass(value = {PaginationInterceptor. ...
- SpringBoot集成MyBatis-Plus分页插件
1.说明 MyBatis使用分页查询功能, 需要配置分页插件, 如果没有配置, 则分页功能不生效. 2.分页查询API 下面列举了两个内置的分页查询API, 使用这些API时需要配置分页插件, 当然也 ...
- Spring Boot 学习[四] web项目实战训练(增删改查,分页,排序)
Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等. 几点说明: Spring boot开发web项目,通常打成 ...
- mybatis-plus分页查询三种方法
mybatis-plus分页查询 一.前期准备表 1.配置类 二.使用selectPage 1.Service 2.结果 三.使用2种分页查询的写法 1.xml 2.Mapper 3.第一种写法 4. ...
- MyBatisplus分页插件
文章目录 一.后台分页配置 1. 配置分页插件 2. 编写分页代码 3. 测试 二.自定义查询 2.1. 自定义接口 2.2. 自定义查询 2.3. 测试自定义分页 一.后台分页配置 MyBatis ...
- MyBatis-Plus分页插件IPage的使用展示------分页查询
使用了Mybatis-plus的分页插件----IPage: IPage 需要在dao层传入IPage的实现类Page对象,该对象实现了IPage IPage内部原理是基于拦截器,拦截的是方法以及方法 ...
- element ui +mybatisPlus分页插件实现分页功能
elementui pagination插件 当然这里的依赖部分就需要去创库ctrl+v了 <!--分页部分 pagination插件 @current-change="handlep ...
- 若依框架以及Mybatis-plus分页插件失效,数据库有多条却只查前十条
最近在若依的基础上开发,因为若依自带分页所以一直就没考虑数据分页,最近发现数据库明明有数据,却只能查出前10条. 首先分析原因,我是在原来代码的基础上,重新封装了vo类返回给前端,导致的分页失效,首先 ...
最新文章
- python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍
- 数据告诉你,胡歌的微世界
- WebDriver自动化测试框架详解
- Java多线程编程-(4)-线程间通信机制的介绍与使用
- [html] 表单可以跨域吗?
- 蓝桥杯第八届省赛JAVA真题----包子凑数
- 蒙特卡罗方法—举例说明(C++、python)
- redis循环键_Redis 性能优化的 13 条军规!史上最全
- Tomcat配置和使用——详解
- java 杭电1237简单计算器
- day12【过渡】SpringCloud
- 百战程序员python900集资源_尚学堂百战程序员:盘点那些实用的Python代码
- LittleVGL-键盘控件
- 资产证券化为什么需要区块链技术?专访趣链科技揭开“区块链+ABS”迷雾
- 经典排序算法动图图解
- 25 个精美的手机网站模板
- 昨天的双十一你又剁手了吗?
- My findings:CoordConv坐标嵌入技术及其泛化性能
- 51单片机应用篇-- --智能门锁
- 液体混合装置plc控制系统 西门子1200仿真系统 包含程序和画面
热门文章
- 网络计算机win7为啥连不上,浅析win7旗舰版64位系统网络连接不上的解决方法
- vue组件走马灯_Vue-component | 文字走马灯组件
- dedecms后台报错“Notice: Use of undefined constant MYSQL_ASSOC - assumed ‘MYSQL_ASSOC‘ ”的解决方法
- 优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
- 服务器维护配件,服务器维修,服务器升级,服务器配件,磁盘柜维修及维护
- php 微信平台,【php】微信公众平台
- 搭建redis集群-(伪分布式)
- 铁甲雄兵显示服务器维护,铁甲雄兵正在获取服务器地址
- 网易云歌单添加到php,给自己的网站添加网易云音乐歌单吧^ ^
- 在win10中安装xp虚拟机的教程--win10专业版