SpringBoot利用pagehelper插件实现分页

我们都知道,SpringBoot是一个集成框架,它已经在内部将spring、springmvc、mysql等都已经集成进去了,就连tomcat它也将其集成进去了,这里我们来使用SpringBoot给大家复习一下分页功能,使用的就是pagehelper这个插件
项目结构:
SpringBoot利用pagehelper插件实现分页
项目中涉及到的表person结构为:
SpringBoot利用pagehelper插件实现分页
这里我在新建springboot项目的时候只选择了web,所以我在pom文件中将mysql、mybatis、DBCP(数据库连接池)、还有分页插件pagehelper依赖进来:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.xalo</groupId>
	<artifactId>SpringBootAndPageHolder</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>SpringBootAndPageHolder</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- 热启动,开发阶段使用,修改工程文件时,服务器自动启动 -->
		<dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-devtools</artifactId>
        </dependency>
		
		<!-- mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		
		<!-- spring中mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>
		
		<!-- 数据库连接池 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
    		<artifactId>commons-dbcp2</artifactId>
		</dependency>
		<dependency>
    		<groupId>org.apache.commons</groupId>
    		<artifactId>commons-pool2</artifactId>
		</dependency>
		<!-- 分页插件配置 -->
		<dependency>
   			<groupId>com.github.pagehelper</groupId>
   			<artifactId>pagehelper-spring-boot-starter</artifactId>
   			<version>1.2.5</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

controller层代码:

package com.example.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.model.Person;
import com.example.demo.service.inter.PageHelperServiceInter;

@Controller
public class PageHelperController {
	@Autowired
	private PageHelperServiceInter service;

	
	@RequestMapping("/pagehelper")
	@ResponseBody
	public List<Person> pageHelperController(int page,int size) {
		System.out.println("controller");
		return service.personService(page, size);
	}
}

这里为了解耦,我将service的实现类和接口分开来创建了:
service接口:

package com.example.demo.service.inter;


import java.util.List;

import com.example.demo.model.Person;

public interface PageHelperServiceInter {
	public List<Person> personService(int page,int size); 
}

service实现类:

package com.example.demo.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.dao.PageHelperDao;
import com.example.demo.model.Person;
import com.example.demo.service.inter.PageHelperServiceInter;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
@Service("service")
public class PageHelperServiceImpl implements PageHelperServiceInter {
	@Autowired
	private PageHelperDao pageHelperDao;
	@Override
	public List<Person> personService(int page, int size) {
		PageHelper.startPage(page, size);//使用分页插件,最核心的一句,即开启分页
		List<Person> list = pageHelperDao.selectDao();
		return list;
	}
	
}

dao层

package com.example.demo.dao;


import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.example.demo.model.Person;

@Mapper
public interface PageHelperDao {
	public List<Person> selectDao();
}

dao层的映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.PageHelperDao">
	<select id="selectDao" resultType="com.example.demo.model.Person">
		select * from person
	</select>
</mapper>

测试所用到的实体类person:

package com.example.demo.model;

public class Person {
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}

SpringBoot主要配置文件,里面配置了数据库连接池、分页插件的配置(可省略):
SpringBoot利用pagehelper插件实现分页
这里我在resources中新建了dao/mappers用来存放dao等的映射文件
到这里其实springboot实现分页就算完成了,其实在springboot中使用pagehelper插件实现分页最终要的一句就是PageHelper.startPage(page, size);其余的就是插件帮我们完成了
我们来测试一下:
SpringBoot利用pagehelper插件实现分页