java后台分页_Java后台管理系统(八):MyBatis分页功能实现

使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写 count 和 select,幸好我们有 pagehelper 分页插件,pagehelper 是一个强大实用的 MyBatis 分页插件,可以帮助我们快速的实现分页功能。那么,接下来我们就来一起体验下吧。

添加依赖

在 kitty-admin pom.xml 文件内添加分页插件依赖包。

pom.xml

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.5

添加配置

在 kitty-boo/application.yml 配置文件内添加分页插件配置。

application.yml

# pagehelper

pagehelper:

helperDialect: mysql

reasonable:truesupportMethodsArguments:trueparams: count=countSql

分页代码

首先,在 DAO 层添加分页查找方法。因为我们的表只有菜单有多条数据,所以选择给菜单加一个分页查询接口。

SysMenuMapper.java

packagecom.louis.kitty.admin.dao;importjava.util.List;importcom.louis.kitty.admin.model.SysMenu;public interfaceSysMenuMapper {intdeleteByPrimaryKey(Long menuId);intinsert(SysMenu record);intinsertSelective(SysMenu record);

SysMenu selectByPrimaryKey(Long menuId);intupdateByPrimaryKeySelective(SysMenu record);intupdateByPrimaryKey(SysMenu record);/*** 分页查询

*@return

*/ListselectPage();

}

给 SysMenuMapper.xml 添加查询方法,这是一个普通的查找全部记录的查询语句,并不需要写分页SQL,分页插件会拦截查询请求,并读取前台传来的分页查询参数重新生成分页查询语句。

SysMenuMapper.xml

selectfrom sys_menu

服务层调用DAO层完成分页查询,这里统一封装分页查询的请求和结果类,从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会影响服务层以上的分页接口,起到了解耦的作用。

SysMenuService.java

packagecom.louis.kitty.admin.sevice;importcom.louis.kitty.admin.page.PageRequest;importcom.louis.kitty.admin.page.PageResult;public interfaceSysMenuService {/*** 分页查询接口

* 这里统一封装了分页请求和结果,避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象

* 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会

* 影响服务层以上的分页接口,起到了解耦的作用

*@parampageRequest 自定义,统一分页查询请求

*@returnPageResult 自定义,统一分页查询结果*/PageResult findPage(PageRequest pageRequest);

}

服务实现类调用分页插件完成分页查询,关键代码是PageHelper.startPage(pageNum, pageSize),将前台分页查询参数传入。

SysMenuServiceImpl.java

packagecom.louis.kitty.admin.sevice.impl;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importcom.github.pagehelper.PageHelper;importcom.github.pagehelper.PageInfo;importcom.louis.kitty.admin.dao.SysMenuMapper;importcom.louis.kitty.admin.model.SysMenu;importcom.louis.kitty.admin.page.PageRequest;importcom.louis.kitty.admin.page.PageResult;importcom.louis.kitty.admin.page.PageUtils;importcom.louis.kitty.admin.sevice.SysMenuService;

@Servicepublic class SysMenuServiceImpl implementsSysMenuService {

@AutowiredprivateSysMenuMapper sysMenuMapper;

@OverridepublicPageResult findPage(PageRequest pageRequest) {returnPageUtils.getPageResult(pageRequest, getPageInfo(pageRequest));

}/*** 调用分页插件完成分页

*@parampageQuery

*@return

*/

private PageInfogetPageInfo(PageRequest pageRequest) {int pageNum =pageRequest.getPageNum();int pageSize =pageRequest.getPageSize();

PageHelper.startPage(pageNum, pageSize);

List sysMenus =sysMenuMapper.selectPage();return new PageInfo(sysMenus);

}

}

PageRequest.java

packagecom.louis.kitty.admin.page;/*** 分页请求*/

public classPageRequest {/*** 当前页码*/

private intpageNum;/*** 每页数量*/

private intpageSize;public intgetPageNum() {returnpageNum;

}public void setPageNum(intpageNum) {this.pageNum =pageNum;

}public intgetPageSize() {returnpageSize;

}public void setPageSize(intpageSize) {this.pageSize =pageSize;

}

}

PageResult.java

packagecom.louis.kitty.admin.page;importjava.util.List;/*** 分页返回结果*/

public classPageResult {/*** 当前页码*/

private intpageNum;/*** 每页数量*/

private intpageSize;/*** 记录总数*/

private longtotalSize;/*** 页码总数*/

private inttotalPages;/*** 数据模型*/

private List>content;public intgetPageNum() {returnpageNum;

}public void setPageNum(intpageNum) {this.pageNum =pageNum;

}public intgetPageSize() {returnpageSize;

}public void setPageSize(intpageSize) {this.pageSize =pageSize;

}public longgetTotalSize() {returntotalSize;

}public void setTotalSize(longtotalSize) {this.totalSize =totalSize;

}public intgetTotalPages() {returntotalPages;

}public void setTotalPages(inttotalPages) {this.totalPages =totalPages;

}public List>getContent() {returncontent;

}public void setContent(List>content) {this.content =content;

}

}

PageUtils.java

packagecom.louis.kitty.admin.page;importcom.github.pagehelper.PageInfo;public classPageUtils {/*** 将分页信息封装到统一的接口

*@parampageRequest

*@parampage

*@return

*/

public static PageResult getPageResult(PageRequest pageRequest, PageInfo>pageInfo) {

PageResult pageResult= newPageResult();

pageResult.setPageNum(pageInfo.getPageNum());

pageResult.setPageSize(pageInfo.getPageSize());

pageResult.setTotalSize(pageInfo.getTotal());

pageResult.setTotalPages(pageInfo.getPages());

pageResult.setContent(pageInfo.getList());returnpageResult;

}

}

SysMenuController.java

packagecom.louis.kitty.admin.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importcom.louis.kitty.admin.page.PageRequest;importcom.louis.kitty.admin.sevice.SysMenuService;

@RestController

@RequestMapping("menu")public classSysMenuController {

@AutowiredprivateSysMenuService sysMenuService;

@PostMapping(value="/findPage")publicObject findPage(@RequestBody PageRequest pageQuery) {returnsysMenuService.findPage(pageQuery);

}

}

接口测试

参数:pageNum: 1, pageSize: 5

20180818211053091898.png

测试结果

20180818211053285265.png

参数:pageNum: 2, pageSize: 5

20180818211053450310.png

测试结果

20180818211053561643.png

参考资料

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值