第一种pageBean
pageBean其实就是手写的pageBean类,并没有pagehelper那么好用,毕竟自己手写的,但基本的思想跟pagehelper一样的,不多说直接上代码
- 创建pageBean类和Book类
package com.nz.homework.domain.entity;
import lombok.Data;
import java.util.List;
@Data
public class PageBean<T> {
private int totalCount; // 总记录数
private int totalPage ; // 总页码
private List<T> list ; // 每页的数据
private int currentPage ; //当前页码
private int rows;//每页显示的记录数
//@Data注解已经生成getter和setter方法,不理解的小伙伴可以手动生成getter和setter的
}
package com.nz.homework.domain.entity;
import java.util.Date;
import lombok.Data;
@Data
public class Book {
/**
* 图书ID
*/
private Integer bid;
/**
* 图书名称
*/
private String name;
/**
* 作者
*/
private String author;
private Double price;
private Date crtTime;
}
2.和平常一样在mapper(dao)层实现方法
import com.nz.homework.domain.entity.Book;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
import java.util.List;
public interface BookMapper {
//查找书本的总数
int selectCount();
//查找书本的全部
List<Book> findByPage(@Param("start") Integer start,@Param("size") Integer size);
}
BookMappers.xml文件
<select id="selectCount" resultType="int">
SELECT count(*) FROM book WHERE flag = 0;
</select>
<select id="findByPage" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM book WHERE flag = 0
LIMIT #{start},#{size}
</select>
3.在sevice层实现方法
public interface BookService {
//方法的集合放到pageBean里面
PageBean<Book> findAll(int currentPage, int pageSize);
}
4.实现service层的方法
import javax.annotation.Resource;
import java.util.List;
@Service("/bookService")
public class BookServiceImpl implements BookService {
@Resource
BookMapper bookMapper;
@Override
public PageBean<Book> findAll(int currentPage, int pageSize) {
//创建pageBean类
PageBean<Book> pageBean = new PageBean<>();
//设置当前页数
pageBean.setCurrentPage(currentPage);
pageBean.setRows(pageSize);
//书本总数
int totalCount = bookMapper.selectCount();
pageBean.setTotalCount(totalCount);
//总页数
double num = Math.ceil((double) totalCount / pageSize);
pageBean.setTotalPage((int)num);
//开始页
int start = (currentPage-1)*pageSize;
//显示条数
int size = pageBean.getRows();
//拿到书本集合
List<Book> byPage = bookMapper.findByPage(start,size);
pageBean.setList(byPage);
// //PageHelper插件实现
// PageHelper.startPage(currentPage, pageSize);
//
// List<Book> byPage = bookMapper.findByPage();
return pageBean;
}
}
5.controller层
package com.nz.homework.controller;
import com.github.pagehelper.PageInfo;
import com.nz.homework.domain.entity.Book;
import com.nz.homework.domain.entity.PageBean;
import com.nz.homework.service.BookService;
import com.nz.homework.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Slf4j
@RestController
@RequestMapping("/book")
public class BookController {
//Result<T>为工具类
@Resource
BookService bookService;
@RequestMapping("/findAll")
public Result findAll(@RequestParam(defaultValue = "1")int currentPage,@RequestParam(defaultValue = "5") int pageSize){
try {
PageBean<Book> bean = bookService.findAll(currentPage, pageSize);
return Result.success(bean);
} catch (Exception e) {
log.error(e.getMessage());
}
return Result.error();
}
}
工具类utils
工具类的代码
package com.nz.homework.utils;
import lombok.Data;
@Data
public class Result<T> {
private String msg;
private int status;
private T data;
public static Result success(Object obj){
Result result = new Result();
result.setMsg(Contants.SUCCESS_MSG);
result.setStatus(Contants.SUCCESS_STATUS_200);
result.setData(obj);
return result;
}
public static Result error(){
Result result = new Result();
result.setMsg(Contants.ERROR_MSG);
result.setStatus(Contants.ERROR_STATUS_404);
return result;
}
}
package com.nz.homework.utils;
public class Contants {
static final String SUCCESS_MSG = "success";
static final String ERROR_MSG = "error";
static final int SUCCESS_STATUS_200 = 200;
static final int ERROR_STATUS_404 = 404;
}
接口查看的时候会显示结果,list就是你mapper层查询数据库的结果
第二种pageHelper
pagehelper肯定比自己写的方便很多,而且也很少代码,确实好用
- 导入maven依赖包
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency>
- 在mybatis-config.xml文件里面配置:
<!-- 引入 pageHelper插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--reasonable:分页合理化参数,默认值为false。
当该参数设置为 true 时,pageNum<=0 时会查询第一页,
pageNum>pages(超过总数时),会查询最后一页。
默认false 时,直接根据参数进行查询。-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
- 在mapper层实现方法:
public interface BookMapper {
List<Book> findByPage();
}
mybatis里面:
<select id="findByPage" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM book WHERE flag = 0
</select>
- service层实现方法
package com.nz.homework.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.nz.homework.domain.entity.Book;
import com.nz.homework.domain.entity.PageBean;
import com.nz.homework.mapper.BookMapper;
import com.nz.homework.service.BookService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("/bookService")
public class BookServiceImpl implements BookService {
@Resource
BookMapper bookMapper;
@Override
public PageInfo<Book> findAll(int currentPage, int pageSize) {
//page插件
//一定要放在bookMapper.findByPage();的上面
PageHelper.startPage(currentPage, pageSize);
// PageInfo<Object> pageInfo = new PageInfo<>();
List<Book> byPage = bookMapper.findByPage();
return new PageInfo<>(byPage);
}
}
- controller层,其实都差不多:
package com.nz.homework.controller;
import com.github.pagehelper.PageInfo;
import com.nz.homework.domain.entity.Book;
import com.nz.homework.domain.entity.PageBean;
import com.nz.homework.service.BookService;
import com.nz.homework.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Slf4j
@RestController
@RequestMapping("/book")
public class BookController {
@Resource
BookService bookService;
@RequestMapping("/findAll")
public Result findAll(@RequestParam(defaultValue = "1")int currentPage,@RequestParam(defaultValue = "5") int pageSize){
try {
PageInfo<Book> bean = bookService.findAll(currentPage, pageSize);
return Result.success(bean);
} catch (Exception e) {
log.error(e.getMessage());
}
return Result.error();
}
}
在接口上查看的结果
对了很多东西,前端可以直接拿到所要的值进行分页,如果想详细了解pagehelper的,可以看看这位博主的文章
https://blog.csdn.net/fanfan_gaolin/article/details/85000253