我们都知道,SpringBoot是一个集成框架,它已经在内部将spring、springmvc、mysql等都已经集成进去了,就连tomcat它也将其集成进去了,这里我们来使用SpringBoot给大家复习一下分页功能,使用的就是pagehelper这个插件
项目结构:
项目中涉及到的表person结构为:
这里我在新建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主要配置文件,里面配置了数据库连接池、分页插件的配置(可省略):
这里我在resources中新建了dao/mappers用来存放dao等的映射文件
到这里其实springboot实现分页就算完成了,其实在springboot中使用pagehelper插件实现分页最重要的一句就是PageHelper.startPage(page, size);其余的就是插件帮我们完成了
我们来测试一下: