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


完整代码



推荐阅读
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文详细介绍了MySQL InnoDB存储引擎中的Redo Log和Undo Log,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文介绍了MySQL窗口函数的基本概念、应用场景及常见函数的使用方法。窗口函数在处理复杂查询时非常有用,例如计算每个用户的订单排名、环比增长率、以及动态聚合等。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • [附源码]计算机毕业设计JAVAjsp医药管理信息系统
    [附源码]计算机毕业设计JAVAjsp医药管理信息系统项目运行环境配置:Jdk1.8Tomcat7.0MysqlHBuilderX(Webstor ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
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社区 版权所有