[2020年第三屆全國中學生網路安全競賽初賽] WriteUp
阿新 • • 發佈:2020-09-14
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 | 是否有下一頁 |