当前位置: 首页 > ai >正文

Java:采用mybatis+pagehealper优雅的实现分页功能

       在实现分页功能时,通常的做法是提供一个查总记录数据的SQL,再提供一个带分页参数的SQL,如果系统需要,可能还需要提供一个查全量记录的SQL。这种实现方式实在是繁琐,理想的实现方式是只提供一个查全量的SQL,分页功能自己能根据这这个基础的SQL生成查总记录数据的SQL和分页参数的SQL。pagehelper组件就能实现这样的功能,但是它需要结合mybatis一起使用。下面就实现一个简单的例子。

1.maven配置pom.xml

<dependency><groupId>org.mybatis.spring.boot<groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.2</version>
</dependency><dependency><groupId>com.github.pagehelper<groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version>
</dependency>

2.spring配置application.yaml

mybatis:mapper-locations: classpath:mapper/*.xmlconfiguration:logImpl: org.apache.ibatis.logging.slf4j.Slf4jImpl

3.mybatis配置roleInfo.mapper.xml

<mapper namespace="org.test.core.dao.RoleDao"><resultMap id="RoleInfo" type="org.test.core.model.RoleInfo"><result property="id" column="role_id" /><result property="name" column="role_name" /><result property="type" column="type" /><result property="state" column="state" /><result property="desc" column="description" /></resultMap><select id="getRoleInfoById" parameterType="string" resultMap="RoleInfo">select role_id, role_name, type, state, descriptionfrom t_rolewhere role_id = #{id}</select><select id="getRoleInfoByMap" parameterType="hashmap" resultMap="RoleInfo">select role_id, role_name, type, state, descriptionfrom t_role<where><if test="id != null and id != ''">and role_id = #{id}</if><if test="name != null and name != ''">and role_name = #{name}</if><if test="state != null and state != ''">and state = #{state}</if></select><select id="getRoleInfoByObj" parameterType="org.test.core.model.RoleInfo" resultMap="RoleInfo">select role_id, role_name, type, state, descriptionfrom t_role<where><if test="id != null and id != ''">and role_id = #{id}</if><if test="name != null and name != ''">and role_name = #{name}</if><if test="state != null and state != ''">and state = #{state}</if></select>
</mapper>

4.java代码

(1)RoleDao.java

import java.util.List;
import java.util.Map;import org.apache.ibatis.annotation.Param;public interface RoleDao {RoleInfo getRoleInfoById (@Param(value = "id") String roleId);List<RoleInfo> getRoleInfoByMap (Map<String, Object> map);List<RoleInfo> getRoleInfoByObj (RoleInfo roleInfo);}

(2)PagingKit

import java.util.List;
import java.util.Map;
import java.util.function.Function;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;public class PagingKit {public static <T> PageInfo<T> makePageInfoUseMap(Map<String, Object> map, int pageNum, int pageSize, Function<Map<String, Object>, List<T>> query) {PageHelper.startPage(pageNum, pageSize);List<T> list = query.apply(map);PageInfo<T> pageInfo = new PageInfo<T>(list);return pageInfo;}public static <T> PageInfo<T> makePageInfoUseObj(T condition, int pageNum, int pageSize, Function<T, List<T>> query) {PageHelper.startPage(pageNum, pageSize);List<T> list = query.apply(condition);PageInfo<T> pageInfo = new PageInfo<T>(list);return pageInfo;}}

(3)HeathController.java

import java.util.HashMap;
import java.util.Map;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.github.pagehelper.PageInfo;@Component
@Path("/sys")
public class HealthController {@Autowiredprivate RoleDao roleDao;@GET@Path("/role/{id}")@Produces({"application/json"})public RoleInfo getRoleById (@PathParam("id") String id) {return roleDao.getRoleInfoById(id);}@GET@Path("/role/byMap")@Produces({"application/json"})public RoleInfo pagingRoleByMap (@queryParam("pageNum") int pageNum, @queryParam("pageSize") int pageSize) {Map<String, Object> map = new HashMap<>();map.put("state", "0");map.put("name", "管理员");PageInfo<RoleInfo> pageInfo = PagingKit.makePageInfoUseMap(map, pageNum, pageSize, roleDao::getRoleInfoByMap); return pageInfo;}@GET@Path("/role/byObj")@Produces({"application/json"})public RoleInfo pagingRoleByObj (@queryParam("pageNum") int pageNum, @queryParam("pageSize") int pageSize) {RoleInfo  role = new RoleInfo();role.setState("0");role.setName("管理员");PageInfo<RoleInfo> pageInfo = PagingKit.makePageInfoUseObj(role, pageNum, pageSize, roleDao::getRoleInfoByObj); return pageInfo;}}

5.执行如果

可以查看日志

getRoleInfoByMap_COUNT|==>Preparing: select count(0) from (select role_id,role_name,type,state,description from t_role where role_name like "%"?"%" and state = ? ) tmp_count

getRoleInfoByMap_COUNT|==>Parameters: 管理员(String), 0(String)

getRoleInfoByMap_COUNT|==>   Total: 1

getRoleInfoByMap==>Preparing: select role_id,role_name,type,state,description from t_role where role_name like "%"?"%" and state = ? LIMIT ?,?

getRoleInfoByMap|==>Parameters: 管理员(String), 0(String), 3(Long),3(Integer)

getRoleInfoByMap|==>   Total: 1

http://www.xdnf.cn/news/16299.html

相关文章:

  • 如何筛选适合自己阅读的文献?高效文献调研流程?
  • 【C++高效编程】STL queue深度剖析:从底层原理到高级应用
  • FastAPI入门:安装、Pydantic、并发和并行
  • 嵌入式硬件篇---有线串口通信问题解决
  • 使用Clion开发STM32(Dap调试)
  • Android WorkManager 详解:高效管理后台任务
  • hot100-每日温度
  • Python爬虫实战:诗词名句网《三国演义》全集
  • obd运维OceanBase数据库的常见场景
  • 0基础法考随手笔记 03(刑诉05 刑事证据与证明+06 强制措施)
  • 【Canvas技法】绘制正N角星
  • 机器学习的工作流程
  • Windows 平台源码部署 Dify教程(不依赖 Docker)
  • 手写PPO_clip(FrozenLake环境)
  • 【LeetCode 热题 100】79. 单词搜索——回溯
  • 电子电气架构 --- 车载软件交样评审流程
  • Java面试题及详细答案120道之(041-060)
  • 排序算法,咕咕咕
  • 进制定义与转换详解
  • vcpkg如何交叉编译
  • HCLP--MGER综合实验
  • 数据结构习题--删除排序数组中的重复项
  • 详解力扣高频SQL50题之1084. 销售分析 III【简单】
  • Python点阵字生成与优化:从基础实现到高级渲染技术
  • 数据恢复与备份
  • 快速入门Linux操作系统(一)
  • 立式加工中心X-Y轴传动机械结构设“cad【6张】三维图+设计说明书
  • 进阶数据结构:用红黑树实现封装map和set
  • 学习嵌入式的第三十一天-数据结构-(2025.7.23)网络协议封装
  • 数据中心-时序数据库InfluxDB