前言:
现在公司大多数都实现了前后端分离, 前端使用 vue,React,AngularJS 等框架, 不用完全依赖后端. 但是如果对于比较小型的项目, 没必要前后端分离, 而 SpringBoot 也基本抛弃了 Jsp, 使用 Thymeleaf 模板搭配 SpringBoot 是个不错的选择.
在展示数据时必然需要大量的分页操作, 在使用 JPA,Mybatis-Plus 等持久层框架时, 已经自带分页查询操作, 无需手动编写, 然而在使用 Mybatis 作为持久层时, 需要手动编写分页操作十分麻烦. PageHelper https://pagehelper.github.io/ 就是用来在 Mybatis 之上帮助我们实现分页操作.
开发环境:
- IDEA IntelliJ IDEA 2019.3.3 x64
- JDK: 1.8
- SpringBoot: 2.25
- PageHelper: 1.2.13
- Mybatis: 2.1.3 (使用 Mybatis 作为持久层)
数据源: Druid 1.1.23
一, SpringBoot 框架搭建
[1] 点击: File ---> New ---> Project
[2] 这个页面选项是选择 SpringBoot 需要的启动依赖, 在这里可以有很多选项, 这里选择 web 和 SQL 中的相应配置, 然后点击下一步.(这里的 SpringBoot 版本有些过高, 可以选择使用默认的最新版本)
[3] 保存路径, 点击 FINSH 完成.
二, 详细配置
1, 在 pom 文件中引入 Pagehelper 分页插件, Driud 数据源 (非必需)
- <!-- Mybatis 分页插件 -->
- <dependency>
- <groupId>com.GitHub.pagehelper</groupId>
- <artifactId>pagehelper-spring-boot-starter</artifactId>
- <version>1.2.13</version>
- </dependency>
- <!-- Druid 数据源 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.1.23</version>
- </dependency>
2, 创建数据库
数据库名: pagehelperdemo 编码字符集: utf8
- CREATE DATABASE `pagehelperdemo`;
- USE `pagehelperdemo`;
- DROP TABLE IF EXISTS `users`;
- CREATE TABLE `users` (
- `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id 主键',
- `username` varchar(20) NOT NULL COMMENT '用户名',
- `PASSWORD` varchar(20) NOT NULL COMMENT '用户密码',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
- insert into `users`(`id`,`username`,`PASSWORD`) values
- (1,'onetest','123'),
- (2,'twotest','456'),
- (3,'onetest','789'),
- (4,'twotest','987'),
- (5,'onetest','654'),
- (6,'twotest','321'),
- (7,'onetest','147'),
- (8,'twotest','258'),
- (9,'onetest','369'),
- (10,'twotest','963');
插入多条数据方便分页查看.
3, 配置分页插件
将 resource 文件夹下的 application.properties 配置文件改成 YAML 后缀, 即 application.YAML, 进行如下配置
- server:
- port: 8089
- spring:
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource
- driver-class-name: com.MySQL.cj.jdbc.Driver
- url: jdbc:MySQL://127.0.0.1:3306/pagehelperdemo?useUnicode=true&characterEncoding=UTF-8
- username: root
- password: root
- thymeleaf:
- encoding: UTF-8
- prefix: classpath:/templates/
suffix: .html
- cache: false
- #mybatis:
- # mapper-locations: classpath:/mapper/*.xml #项目中使用注解进行开发
- pagehelper:
- helper-dialect: MySQL # 指定数据库类型
- reasonable: true
- params: count=countSql
- support-methods-arguments: true
三, 代码编写
1, 创建用户实体类
- package com.jia.pojo;
- /**
- * Created with IntelliJ IDEA.
- *
- * @Author: ButterflyStars
- * @DateTime: Created in 2020/7/22 1:28
- * @QQ: 1498575492
- * Description: 用户信息实体类
- */
- public class User {
- private Integer id;
- private String username;
- private String password;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", username='" + username + '\'' +
- ", password='" + password + '\'' +
- '}';
- }
- }
2, 创建用户持久层接口: UserDaoMapper
- package com.jia.mapper;
- import com.jia.pojo.User;
- import org.apache.ibatis.annotations.Select;
- import java.util.List;
- /**
- * Created with IntelliJ IDEA.
- *
- * @Author: ButterflyStars
- * @DateTime: Created in 2020/7/22 1:31
- * @QQ: 1498575492
- * Description: 用户持久层接口
- */
- public interface UserDaoMapper {
- // 查询所有用户
- @Select("select id,username,password from users")
- List<User> getAllUser();
- }
3, 创建业务层接口和实现类: UserService,UserServiceImpl
- package com.jia.service;
- import com.jia.pojo.User;
- import java.util.List;
- /**
- * Created with IntelliJ IDEA.
- *
- * @Author: ButterflyStars
- * @DateTime: Created in 2020/7/22 1:35
- * @QQ: 1498575492
- * Description: 用户业务层接口
- */
- public interface UserService {
- // 查询所有用户
- List<User> getAllUser();
- }
- package com.jia.service.impl;
- import com.jia.mapper.UserDaoMapper;
- import com.jia.pojo.User;
- import com.jia.service.UserService;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.List;
- /**
- * Created with IntelliJ IDEA.
- *
- * @Author: ButterflyStars
- * @DateTime: Created in 2020/7/22 1:36
- * @QQ: 1498575492
- * Description: 用户业务层接口实现类
- */
- @Service
- public class UserServiceImpl implements UserService {
- @Resource
- UserDaoMapper userDaoMapper;
- @Override
- public List<User> getAllUser() {
- return userDaoMapper.getAllUser();
- }
- }
4, 创建用户控制层: UserController
[1] 编写测试 Cntroller, 检测是否能查询到数据.
- package com.jia.controller;
- import com.jia.pojo.User;
- import com.jia.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.Web.bind.annotation.GetMapping;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.RequestParam;
- import org.springframework.Web.bind.annotation.ResponseBody;
- import java.util.List;
- /**
- * Created with IntelliJ IDEA.
- *
- * @Author: ButterflyStars
- * @DateTime: Created in 2020/7/22 1:39
- * @QQ: 1498575492
- * Description: 用户控制层
- */
- @Controller
- @RequestMapping("/user")
- public class UserController {
- @Autowired
- private UserService userService;
- @GetMapping("/findAll")
- @ResponseBody
- public List<User> findUser() {
- List<User> userList = userService.getAllUser();
- return userList;
- }
- }
[2] 数据查询成功.
[3] 修改后的 UserController
- package com.jia.controller;
- import com.GitHub.pagehelper.PageHelper;
- import com.GitHub.pagehelper.PageInfo;
- import com.jia.pojo.User;
- import com.jia.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.Web.bind.annotation.GetMapping;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.RequestParam;
- import java.util.List;
- /**
- * Created with IntelliJ IDEA.
- *
- * @Author: ButterflyStars
- * @DateTime: Created in 2020/7/22 1:39
- * @QQ: 1498575492
- * Description: 用户控制层
- */
- @Controller
- @RequestMapping("/user")
- public class UserController {
- @Autowired
- private UserService userService;
- /**
- * @param model
- * @param pageNum 当前页数
- * @return
- */
- @GetMapping("/findAll")
- public String findUser(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum) {
- PageHelper.startPage(pageNum,5); // 默认从第一页开始, 每页展示五条数据
- List<User> userList = userService.getAllUser();
- PageInfo<User> pageInfo = new PageInfo<>(userList);
- model.addAttribute("pageInfo",pageInfo);
- return "index";
- }
- }
5, 添加 MapperScan 注解
修改 启动文件, 在类前添加 MapperScan 注解, 修改后如下:
- package com.jia;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- @SpringBootApplication
- @MapperScan("com.jia.mapper")
- public class PagehelperDemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(PagehelperDemoApplication.class, args);
- }
- }
6, 创建 index.HTML 页面, 引入 Thymeleaf 依赖
注意: 对 user 进行取值时, 属性会有红色波浪线提示, 并不影响运行.
- <!doctype HTML>
- <HTML lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>
- 分页测试
- </title>
- </head>
- <body>
- <h3>
- 查询所有用户
- </h3>
- <table border="1">
- <tr>
- <th>
- id
- </th>
- <th>
- name
- </th>
- <th>
- password
- </th>
- </tr>
- <tr th:each="user:${pageInfo.list}">
- <td th:text="${user.id}">
- </td>
- <td th:text="${user.username}">
- </td>
- <td th:text="${user.password}">
- </td>
- </tr>
- </table>
- <p>
- 当前
- <span th:text="${pageInfo.pageNum}">
- </span>
- 页, 总
- <span th:text="${pageInfo.pages}">
- </span>
- 页, 共
- <span th:text="${pageInfo.total}">
- </span>
- 条记录
- </p>
- <a th:href="@{/user/findAll}">
- 首页
- </a>
- <a th:href="@{/user/findAll(pageNum=${pageInfo.hasPreviousPage}?${pageInfo.prePage}:1)}">
- 上一页
- </a>
- <a th:href="@{/user/findAll(pageNum=${pageInfo.hasNextPage}?${pageInfo.nextPage}:${pageInfo.pages})}">
- 下一页
- </a>
- <a th:href="@{/user/findAll(pageNum=${pageInfo.pages})}">
- 尾页
- </a>
- </body>
- </HTML>
四, 运行测试
启动 SpringBoot 工程, 在浏览器输入: http://localhost:8089/user/findAll, 可以看到网页显示用户信息表格, 点击上一页, 下一页可以进行页面切换显示数据.
来源: https://www.cnblogs.com/ButterflyStars/p/13359772.html