1. 程式人生 > 實用技巧 >[2020年第三屆全國中學生網路安全競賽初賽] WriteUp

[2020年第三屆全國中學生網路安全競賽初賽] WriteUp

SpringBoot整合PageHelper分頁外掛

本案例實用基礎環境為SpringBoot+Mybatis

第一步:匯入依賴

<?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.0.1.RELEASE</version>
    </parent>

    <groupId>cn.blogsx</groupId>
    <artifactId>spring_pagehelper</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- web功能起步依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--整合PageHelper-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!--  mybatis依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- druid資料庫連線池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>
        <!-- mysql驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

</project>

資料庫檔案:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `books`;
CREATE TABLE `books`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '書籍id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '書籍名稱',
  `author` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '書籍作者',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;

INSERT INTO `books` VALUES (1, '三國演義', '羅貫中');
INSERT INTO `books` VALUES (2, '水滸傳', '施耐庵');
INSERT INTO `books` VALUES (3, '西遊記', '吳承恩');
INSERT INTO `books` VALUES (4, '紅樓夢', '曹雪芹');
INSERT INTO `books` VALUES (5, '周公解夢', '周公');

SET FOREIGN_KEY_CHECKS = 1;

配置檔案:

server.port=8080

# 資料庫連線相關配置
spring.datasource.url=jdbc:mysql:///springboot-mybatis?characterEncoding=utf8&useSSL=true
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

# MyBatis註解形式掃描實體類路徑
mybatis.type-aliases-package=cn.blogsx.entity

# MyBatis XML形式配置檔案路徑
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

#pagehelper配置
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql

第二步:編寫相關類、包括controller層、service層、mapper層

實體類:

package cn.blogsx.entity;

public class Book {
    private Integer id;
    private String name;
    private String author;

   //此處省去gette setter
}

Mapper介面

package cn.blogsx.mapper;

import cn.blogsx.entity.Book;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface IBookMapper {
    List<Book> getAllBooks(); //獲取所有書籍
}

Mapper對應的xml對映檔案

<?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="cn.blogsx.mapper.IBookMapper">
    <select id="getAllBooks" resultType="cn.blogsx.entity.Book">
        select id,name,author from books
    </select>
</mapper>

Service層編寫,此處為實現分頁的關鍵程式碼:

package cn.blogsx.service;

import cn.blogsx.entity.Book;
import com.github.pagehelper.PageInfo;

//介面
public interface BookService {
    /**
     * PageHelper分頁介面
     * @param pageNum
     * @param pageSize
     * @return PageInfo類
     */
    public PageInfo<Book> allBook(int pageNum, int pageSize);
}

實現分頁介面的實現類:

package cn.blogsx.service.impl;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private IBookMapper iBookMapper;

    @Override
    public PageInfo<Book> allBook(int pageNum, int pageSize) {
        //開啟分頁
        PageHelper.startPage(pageNum,pageSize);  //pageNum為頁碼,pageSize為頁面大小
        List<Book> bookList = iBookMapper.getAllBooks();
        PageInfo<Book> pageInfo = new PageInfo<Book>(bookList);
        return pageInfo;
    }
}

controller層:

package cn.blogsx.controller;

@RestController
public class BookController {

    @Autowired
    private BookService bookService;
    
    @RequestMapping("/books")` `
    public PageInfo<Book> books(Integer pageNum, Integer pageSize) {
        return bookService.allBook(pageNum,pageSize);
    }
}

第三步:傳參測試:

http://localhost:8080/books?pageNum=1&pageSize=2

返回值含義:

PageInfo.list 結果集
PageInfo.pageNum 當前頁碼
PageInfo.pageSize 當前頁面顯示的資料條目
PageInfo.pages 總頁數
PageInfo.total 資料的總條目數
PageInfo.prePage 上一頁
PageInfo.nextPage 下一頁
PageInfo.isFirstPage 是否為第一頁
PageInfo.isLastPage 是否為最後一頁
PageInfo.hasPreviousPage 是否有上一頁
PageHelper.hasNextPage 是否有下一頁