Mybatis-plus自定义分页工具

Mybatis-plus自定义分页工具

这里主要是介绍通过MyBatis-Plus使用自定义分页工具进行条件分页查询示例等,方便以后查阅!!!

分页工具类-PageUtils

PageUtils

package com.wl.cloud.core.utils;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;import java.util.Objects;
import java.util.stream.Collectors;/*** @author: wanglin* @date: 2023-07-12 周三* @Version: 1.0* @Description: 分页工具类*/
public class PageUtils {private static ApplicationContext applicationContext;public static void setApplicationContext(ApplicationContext applicationContext) {PageUtils.applicationContext = applicationContext;}public static <T> Page<T> transferPage(Pageable pageable) {if (Objects.isNull(pageable)) {return new Page(1, 10);}int pageNumber = pageable.getPageNumber();int pageSize = pageable.getPageSize();Page page = new Page(pageNumber + 1, pageSize);Sort sort = pageable.getSort();if (sort.isUnsorted()) {return page;}SqlSessionFactory sqlSessionFactory = applicationContext.getBean(SqlSessionFactory.class);Configuration configuration = sqlSessionFactory.getConfiguration();boolean underCamel = configuration.isMapUnderscoreToCamelCase();page.setOrders(pageable.getSort().stream().map(r -> new OrderItem(underCamel ? StringUtils.camelToUnderline(r.getProperty()) : r.getProperty(), r.isAscending())).collect(Collectors.toList()));return page;}public static <T> void transferSort(QueryWrapper queryWrapper, Sort sort) {if (Objects.isNull(queryWrapper) || Objects.isNull(sort) || sort.isUnsorted()) {return;}SqlSessionFactory sqlSessionFactory = applicationContext.getBean(SqlSessionFactory.class);Configuration configuration = sqlSessionFactory.getConfiguration();boolean underCamel = configuration.isMapUnderscoreToCamelCase();for (Sort.Order order : sort) {queryWrapper.apply("1=1");if (order.isAscending()) {queryWrapper.orderByAsc(underCamel ? StringUtils.camelToUnderline(order.getProperty()) : order.getProperty());} else {queryWrapper.orderByDesc(underCamel ? StringUtils.camelToUnderline(order.getProperty()) : order.getProperty());}}}
}

配合mapper文件使用

serverImpl文件

@Transactional(readOnly = true)@Overridepublic DataStoreDTO<ProcessVO> page(Pageable pageable, ProcessQueryDTO queryDto) {QueryWrapper<Process> queryWrapper = this.buildQuery(queryDto);Page<ProcessVO> page = PageUtils.transferPage(pageable);IPage<ProcessVO> result = this.processMapper.getPage(page, queryWrapper);return new DataStoreDTO(result.getTotal(), result.getRecords());}@Transactional(readOnly = true)@Overridepublic List<ProcessVO> list(Sort sort, ProcessQueryDTO queryDto) {QueryWrapper<Process> queryWrapper = this.buildQuery(queryDto);PageUtils.transferSort(queryWrapper, sort);return this.processMapper.getList(queryWrapper);}@Transactional(readOnly = true)@Overridepublic ProcessVO get(String id) {Assert.hasText(id, "id不能为空");ProcessVO vo = processMapper.getById(id);Assert.notNull(vo, "找不到id为 " + id + " 的记录");return vo;}

mapper文件

package com.wl.cloud.business.common.dao;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.wl.cloud.business.common.domain.Process;
import com.wl.cloud.business.common.support.dto.query.ProcessQueryDTO;
import com.wl.cloud.business.common.support.vo.ProcessVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;/*** 进程信息 Mapper接口** @author wanglin* @since 2024-03-22*/
@Mapper
public interface ProcessMapper extends BaseMapper<Process> {/*** 分页** @param page* @param ew* @return*/IPage<ProcessVO> getPage(IPage<ProcessVO> page, @Param(Constants.WRAPPER) Wrapper<Process> ew);/*** 列表** @param* @return*/List<ProcessVO> getList(@Param(Constants.WRAPPER) Wrapper<Process> ew);/*** 查询详情** @param id* @return*/ProcessVO getById(@Param("id") String id);
}

mapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wl.cloud.business.common.dao.ProcessMapper"><!-- 通用查询结果列 --><sql id="Base_Column_List">id, create_by, create_time, update_by, update_time, deleted, description, name, path, port, project_url, server_id</sql><select id="getList" resultType="com.wl.cloud.business.common.support.vo.ProcessVO">select<include refid="com.wl.cloud.business.common.dao.ProcessMapper.Base_Column_List"></include>from gl_process<where>deleted = 0<if test="ew.sqlSegment !=null and ew.sqlSegment !=''">and ${ew.sqlSegment}</if></where></select><select id="getPage" resultType="com.wl.cloud.business.common.support.vo.ProcessVO">select<include refid="com.wl.cloud.business.common.dao.ProcessMapper.Base_Column_List"></include>from gl_process<where>deleted = 0<if test="ew.sqlSegment !=null and ew.sqlSegment !=''">and ${ew.sqlSegment}</if></where></select><select id="getById" parameterType="string" resultType="com.wl.cloud.business.common.support.vo.ProcessVO">select<include refid="com.wl.cloud.business.common.dao.ProcessMapper.Base_Column_List"></include>from gl_process<where>deleted = 0 andid = #{id}</where></select>
</mapper>

关注林哥,持续更新哦!!!★,°:.☆( ̄▽ ̄)/$:.°★ 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter接口测试:使用教程(下)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 上一篇我给大家讲了jmeter的基本介绍跟参数化和jmeter脚…

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

前言 上文说到&#xff0c;Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能&#xff0c;用于保护基于Spring的应用程序。 上文又说到&#xff0c;在Spring Security中&#xff0c;过滤器&#xff08;Filter&#xff09;是一个重…

png静图转换gif动图如何操作?轻松一键快速转换gif动图

想要把多张Png格式图片转换成gif格式动图时要怎么操作&#xff1f;图片常见的有静图和动图&#xff0c;而jpg、png、gif等是最常见的图片格式。想要把png格式图片转换成gif动画还不想下载任何软件的时候就可以使用gif制作工具。不需要下载软件在线就能操作。能够轻轻松松就能快…

北斗卫星系统在海上测量中的创新应用

北斗卫星系统在海上测量中的创新应用 随着全球导航卫星系统技术的飞速发展&#xff0c;北斗卫星系统作为中国自主研发的全球卫星导航系统&#xff0c;在海上测量和导航领域展现出了无可比拟的优势和广阔的应用前景。 一、北斗卫星系统概述 北斗卫星系统是由中国自主研发的全球…

PostgreSQL开发与实战(8.3)锁的维护

作者&#xff1a;太阳 1 锁相关参数 deadlock_timeout&#xff08;integer&#xff09;&#xff1a;默认1s&#xff0c;表示pg数据库仅对锁超时大于1s的情况进行死锁检测。 log_lock_waits : 默认关闭&#xff0c;若打开该参数则表示会将锁超时超过deadlock_timeout的信息记…

理解 HuggingFace 是什么

HuggingFace 是一个开源社区和公司&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;的工具和资源。它的主要特点包括&#xff1a; Transformers 库&#xff1a;HuggingFace 提供了一个名为 Transformers 的 Python 库&#xff0c;该库包含了大量的预训练模型和…

git远程仓库拉取超过1G报错解决办法

第一种 如果浅克隆最近一次提交不会超过1G那就浅克隆 //浅层clone代码 depth 1只会拉取最后一次log&#xff0c; depth(后面数字越大拉取的历史记录越多) 1.git clone --depth 1 远程地址 //拉取完整当前分支 2.git fetch --unshallow利用远程分支名称拉取 git branch -a git…

Unity WebGL 2020 Release-Notes

&#x1f308;WebGL 2020 Release-Notes 版本更新内容2020.3.48WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.47WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.46WebGL: Any recent desktop version of Fire…

idea中打印日志不会乱码,但是部署到外部tomcat中乱码了。

问题&#xff1a;如图Tomcat乱码&#xff0c;而且启动时的系统日志不会乱码&#xff0c;webapp中的打印日志才乱码。 idea中的情况如下&#xff1a;正常中文展示。 问题分析&#xff1a;网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配&#xff0c;网上集中的解决…

idea 打开文件一直loading

背景 用idea打开项目&#xff0c;发现项目目录一直在loading&#xff0c;怎么等也出不来&#xff0c;在网上查说是IDEA的索引出现问题或者是代码库文件过大造成的。 解决方法 在IDEA中&#xff0c;依次点击「File」->「Invalidate Caches/Restart」&#xff0c;然后勾选弹…

Unity类银河恶魔城学习记录12-11 P133 Merge Skill Tree with Parry skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Parry_Skill.cs using UnityEngine; using UnityEngine.UI;public class P…

MySQL进阶 ==> 引擎选择优化指南

数据库引擎的选择&#xff1a; InnoDB InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎&#xff0c;InnoDB写的处理效率差一些&#xff0c;并且会占用更多的磁盘空间以保留数据和索引。 存储方…

大模型应用实践闭门研讨会即将召开|爱分析活动

随着人工智能领域大模型技术的快速发展&#xff0c;政府出具很多指导性意见&#xff0c;在最新的《2024年政府工作报告》中&#xff0c;明确提出了开展“人工智能”行动&#xff0c;显示出政府对AI大模型发展的高度重视和支持。金融行业在AI大模型领域的政策支持和工作进展都呈…

力扣---LCR 095.最长公共子序列

给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以…

AMD vs Intel处理器对比:性能、功耗、价格全方位分析

AMD处理器型号通常由一系列字母、数字和符号组成&#xff0c;这些元素共同构成了一个完整、具有特定含义的标识符。下面跟随道合顺一起来理解这些标识符背后的含义。 解读AMD处理器标识符 品牌系列标识 AMD处理器型号的开头通常会包含品牌系列标识&#xff0c;如“Ryzen”、“T…

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色&#xff0c;因才施用&#xff0c;需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好&#xff0c;而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才&#xff0c;才能高效配合…

Matlab之空间坐标系绘制平面图形

在空间直角坐标系中&#xff0c;绘制指定平面方程的图形 版本说明&#xff1a; 20240413_V1.01&#xff1a;更正代码错误&#xff0c;并修改输入参数类型&#xff08;测试用例得修改&#xff09; 20240413_V1.00&#xff1a;初始版本 一、平面方程 基本形式为&#xff1a;A…

读取pcd文件并在rviz中进行显示

参考&#xff1a;pcd文件在rviz中显示 功能包创建 cd Downloads/ROS mkdir -p pcdreadshow_ws/src cd src catkin_init_workspace catkin_create_pkg read_pcd pcl_conversions pcl_ros roscpp sensor_msgs读取点云文件并发布 #include<ros/ros.h> #include<pcl/po…

postgresql数据库pg_dirtyread插件闪回技术 —— 筑梦之路

闪回查询&#xff08;Flashback Query&#xff09;是一种在数据库中执行时间点查询的技术。它允许查询数据库中过去某个时间点的数据状态&#xff0c;并返回相应的查询结果。通常闪回查询分为表级以及行级的闪回查询。PostgreSQL数据库由于MVCC的机制&#xff0c;对于DML的操作…

前端webWorker 的介绍以及应用

文章目录 webWorker以下是关于 Web Workers 的一些关键概念&#xff1a;控制台查看使用注意事项消息传递创建subworkerwebWorker的具体使用注意事项 共享worker(SharedWorker)创建方法&#xff1a;与专用worker的主要区别&#xff1a; webWorker JavaScript是单线程的语言&…