热门标签 | 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;推荐在项目中使用。


完整代码



推荐阅读
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
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社区 版权所有