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


完整代码



推荐阅读
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
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社区 版权所有