热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

boot集成的邮箱spring_springboot集成mybatis(2)–使用pagehelper实现分页

章节SpringBoot介绍SpringBoot开发环境搭建(Eclipse)SpringBootHelloWorld(restful接口)例子spri

章节

  • Spring Boot 介绍
  • Spring Boot 开发环境搭建(Eclipse)
  • Spring Boot Hello World (restful接口)例子
  • spring boot 连接Mysql
  • spring boot配置druid连接池连接mysql
  • spring boot集成mybatis(1)
  • spring boot集成mybatis(2) – 使用pagehelper实现分页
  • spring boot集成mybatis(3) – mybatis generator 配置
  • spring boot 接口返回值封装
  • spring boot输入数据校验(validation)
  • spring boot rest 接口集成 spring security(1) – 最简配置
  • spring boot rest 接口集成 spring security(2) – JWT配置
  • spring boot 异常(exception)处理
  • spring boot 环境配置(profile)切换
  • spring boot redis 缓存(cache)集成

概述

本文在前一篇教程的基础上,使用常用的pagehelper插件,添加分页功能。本文将实现一个列出所有用户的接口,分页返回结果

准备数据

数据库和数据表都使用前面章节 [spring boot集成mybatis(1)] 用过的,因为要分页,表里需要插入更多数据。

mysql命令行客户端连接数据库

mysql -h localhost -u root -p

插入数据的sql语句:

INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc3', '13512345603', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc4', '13512345604', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc5', '13512345605', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc6', '13512345606', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc7', '13512345607', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc8', '13512345608', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc9', '13512345609', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc10', '13512345610', '123');

项目依赖

不创建新项目,重用章节 [spring boot集成mybatis(1)] 里的项目,没有项目请按该文创建。
Eclipse打开该项目,在pom.xml文件中,添加依赖:pagehelper-spring-boot-starter,引入pagehelper相关依赖包

添加依赖:pagehelper-spring-boot-starter

在pom.xml中添加依赖

com.github.pagehelperpagehelper-spring-boot-starter1.2.10

完整的pom.xml文件


4.0.0org.springframework.bootspring-boot-starter-parent2.1.1.RELEASE com.qikeguspringboot-mybatis-demo0.0.1-SNAPSHOTspringboot-mybatis-demoDemo project for Spring Boot1.8org.springframework.bootspring-boot-starter-jdbcorg.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter1.3.2mysqlmysql-connector-javaruntimeorg.springframework.bootspring-boot-starter-testtestcom.github.pagehelperpagehelper-spring-boot-starter1.2.10org.springframework.bootspring-boot-maven-plugin

项目配置

添加pagehelper配置

在application.properties中添加pagehelper配置

pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

说明:

  • helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。你也可以配置helperDialect属性来指定分页插件使用哪种方言。
  • reasonable&#xff1a;分页合理化参数&#xff0c;默认值为false。当该参数设置为 true 时&#xff0c;pageNum<&#61;0 时会查询第一页&#xff0c; pageNum>pages&#xff08;超过总数时&#xff09;&#xff0c;会查询最后一页。默认false 时&#xff0c;直接根据参数进行查询。
  • params&#xff1a;用于从对象中根据属性名取值&#xff0c; 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable&#xff0c;不配置映射的用默认值&#xff0c; 默认值为pageNum&#61;pageNum;pageSize&#61;pageSize;count&#61;countSql;reasonable&#61;reasonable;pageSizeZero&#61;pageSizeZero
  • supportMethodsArguments&#xff1a;默认值false&#xff0c;分页插件会从查询方法的参数值中&#xff0c;自动根据上面 params 配置的字段中取值&#xff0c;查找到合适的值时就会自动分页。

更多信息参考pagehelper官网

application.properties完整内容

## 服务器端口&#xff0c;如果不配置默认是8080端口
server.port&#61;8096 ## 数据库设置
spring.datasource.driver-class-name&#61;com.mysql.cj.jdbc.Driver
spring.datasource.url&#61;jdbc:mysql://192.168.0.99:3306/qikegu_demo?serverTimezone&#61;UTC&useUnicode&#61;true&characterEncoding&#61;utf8
spring.datasource.username&#61;root
spring.datasource.password&#61;qazwsx## mybatis配置
# 指向映射类目录
mybatis.type-aliases-package&#61;com.qikegu.demo.model
# 指向映射xml文件目录
mybatis.mapper-locations&#61;classpath:mapper/*.xml## pagehelper
pagehelper.helperDialect&#61;mysql
pagehelper.reasonable&#61;true
pagehelper.supportMethodsArguments&#61;true
pagehelper.params&#61;count&#61;countSql

添加代码

pagehelper 使用方法

pagehelper使用方法有好几种&#xff0c;这里我们介绍最常用的2种&#xff1a;

//方法1&#xff0c;Mapper接口方式的调用&#xff0c;推荐这种使用方式。
PageHelper.startPage(1, 10); // pageNum&#61;1, pageSize&#61;10
List list &#61; countryMapper.selectIf(1);

//方法2&#xff0c;参数方法调用
//存在以下 Mapper 接口方法&#xff0c;你不需要在 xml 处理后两个参数
public interface CountryMapper {List selectByPageNumSize(&#64;Param("user") User user,&#64;Param("pageNum") int pageNum,&#64;Param("pageSize") int pageSize);
}
//配置supportMethodsArguments&#61;true
//在代码中直接调用&#xff1a;
List list &#61; countryMapper.selectByPageNumSize(user, 1, 10);

本文例子采取方法1&#xff0c;更多方法参考pagehelper官网

代码实现

添加我们要实现的功能&#xff1a;列出所有用户&#xff0c;分页返回结果。下面几个文件需要修改&#xff1a;

  • UserController.java – 控制层
  • UserService.java & UserServiceImpl.java – 服务层
  • UserMapper.java & UserMapper.xml – 数据访问层

如图&#xff1a;

d078fe10a924b60c94921fa6637f1e2e.png

UserController.java

新增一个函数

&#64;RequestMapping(value&#61;"", method &#61; RequestMethod.GET, produces&#61;"application/json")public PageInfo listUser(&#64;RequestParam(value&#61;"page", required&#61;false, defaultValue&#61;"1") int page,&#64;RequestParam(value&#61;"page-size", required&#61;false, defaultValue&#61;"5") int pageSize){List result &#61; userService.listUser(page, pageSize);// PageInfo包装结果&#xff0c;返回更多分页相关信息PageInfo pi &#61; new PageInfo(result);return pi;}

说明&#xff1a;

此函数是接口的控制层&#xff0c;其中

  • &#64;RequestParam 注解获取url中的?page&#61;1&page-size&#61;5参数&#xff0c;value&#61;"page"是url中的参数名&#xff0c;required指参数是否必须&#xff0c;如果是必须URL却没有这个参数会报错&#xff0c;defaultValue&#61;"1"缺省值
  • PageInfo PageInfo包装结果&#xff0c;返回更多分页相关信息

完整代码&#xff1a;

package com.qikegu.demo.controller;import java.util.List;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qikegu.demo.model.User;
import com.qikegu.demo.service.UserService;&#64;RestController
&#64;EnableAutoConfiguration
&#64;RequestMapping("/user")
public class UserController {// 注入mapper类&#64;Resourceprivate UserService userService;&#64;RequestMapping(value&#61;"{id}", method&#61;RequestMethod.GET, produces&#61;"application/json")public User getUser(&#64;PathVariable long id) throws Exception {User user &#61; this.userService.getUserById(id);return user;}&#64;RequestMapping(value&#61;"", method &#61; RequestMethod.GET, produces&#61;"application/json")public PageInfo listUser(&#64;RequestParam(value&#61;"page", required&#61;false, defaultValue&#61;"1") int page,&#64;RequestParam(value&#61;"page-size", required&#61;false, defaultValue&#61;"5") int pageSize){List result &#61; userService.listUser(page, pageSize);// PageInfo包装结果&#xff0c;返回更多分页相关信息PageInfo pi &#61; new PageInfo(result);return pi;}}

UserService.java & UserServiceImpl.java

UserService.java新增一个接口

public List listUser(int page, int pageSize);

UserServiceImpl.java新增上面接口的实现

&#64;Overridepublic List listUser(int page, int pageSize) {List result &#61; null;try {// 调用pagehelper分页&#xff0c;采用starPage方式。starPage应放在Mapper查询函数之前PageHelper.startPage(page, pageSize); //每页的大小为pageSize&#xff0c;查询第page页的结果PageHelper.orderBy("id ASC "); //进行分页结果的排序result &#61; userMapper.selectUser();} catch (Exception e) {e.printStackTrace();}return result;}

说明&#xff1a;

请看代码注释

完整代码&#xff1a;

UserService.java

package com.qikegu.demo.service;import java.util.List;import com.qikegu.demo.model.User;public interface UserService {public User getUserById(long userId);public List listUser(int page, int pageSize);
}

UserServiceImpl.java

package com.qikegu.demo.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.github.pagehelper.PageHelper;
import com.qikegu.demo.model.User;
import com.qikegu.demo.repository.UserMapper;
import com.qikegu.demo.service.UserService;&#64;Service("userService")
public class UserServiceImpl implements UserService {//注入mybatis数据库查询类&#64;Resourceprivate UserMapper userMapper;&#64;Overridepublic User getUserById(long userId) {return userMapper.selectByPrimaryKey(userId);}&#64;Overridepublic List listUser(int page, int pageSize) {List result &#61; null;try {// 调用pagehelper分页&#xff0c;采用starPage方式。starPage应放在Mapper查询函数之前PageHelper.startPage(page, pageSize); //每页的大小为pageSize&#xff0c;查询第page页的结果PageHelper.orderBy("id ASC "); //进行分页结果的排序result &#61; userMapper.selectUser();} catch (Exception e) {e.printStackTrace();}return result;}
}

UserMapper.java & UserMapper.xml

UserMapper.java 新增接口

// 列出用户&#xff0c;对应xml映射文件元素的IDList selectUser();

UserMapper.xml 该接口新增mybatis xml实现


说明

请看代码注释

完整代码

UserMapper.java

package com.qikegu.demo.repository;import java.util.List;import com.qikegu.demo.model.User;public interface UserMapper {// 查询某个用户&#xff0c;对应xml映射文件元素的IDUser selectByPrimaryKey(long id);// 列出用户&#xff0c;对应xml映射文件元素的IDList selectUser();
}

UserMapper.xml



id, nickname, mobile, password, role

运行


Eclipse左侧&#xff0c;在项目根目录上点击鼠标右键弹出菜单&#xff0c;选择&#xff1a;run as -> spring boot app 运行程序。
我们使用Postman访问接口&#xff0c;Postman是一款很强大的接口测试工具&#xff0c;很常用称得上是“居家旅行必备”&#xff0c;推荐使用。安装很简单&#xff0c;去官网下载一个&#xff0c;按照步骤安装就可以了。运行结果如下&#xff1a;

5875ebdebb9e5fa61176f5fbb9c2d6eb.png


总结


分页功能可以说是web开发中的必备功能&#xff0c;本文在前一篇教程的基础上&#xff0c;介绍了mybatis pagehelper插件的集成过程&#xff0c;pagehelper是一款常用的分页插件&#xff0c;具有和Mapper.xml完全解耦的优点&#xff0c;推荐在项目中使用。


完整代码



推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
author-avatar
faithKOBE
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有