Mybatis实现分页查询
Posted 章鱼小丸子duduu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis实现分页查询相关的知识,希望对你有一定的参考价值。
一. 简单分页查询——limit
使用select查询时,如果结果集数据量较大,一个页面难以处理,就会采用分页查询。
分页查询,就是从结果集中拿出指定的第n页到第m页的数据来显示。
// limit分页公式
// currentPage:当前页
// pageSize:每页记录数
limit (currentPage-1) * pageSize,pageSize
// SQL语句
select * from student limit(currentPage-1)*pageSize,pageSize;
1. 基于注解的简单分页查询
【Mapper接口】
@select("select * from student limit #pageBegin,#pageSize")
List<Student> findByPage(@Param("pageBegin") Integer PageBegin,@Param("PageSize")Integer PageSize);
【Controller类·】
@GetMapping("/findByPage")
public List<Student> findByPage(Integer page,Integer pageSize)
Integer pageBegin = (page-1) * pageSize;
return StudentMapper.findByPage(pageBegin,pageSize);
二.基于mapper.xml的复杂分页
1. 【定义Page类——封装分页结果】
/**
* 分页结果封装对象
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class PageResult implements Serializable
private Long total;//总记录数
private List rows;//当前页结果
2.【定义PageResult类——封装查询条件】
封装查询条件 请求参数包括页码、每页显示记录数、查询条件。 请求参数的json格式为:currentPage:1,pageSize:10,queryString:''apesource''
// 分页请求。
@AllArgsConstructor
@NoArgsConstructor
@Data
public class QueryPageBean implements Serializable
private Integer currentPage;//当前页码
private Integer pageSize;//每页记录数
private String queryString;//查询条件
public QueryPageBean(Integer currentPage, Integer pageSize)
this.currentPage = currentPage;
this.pageSize = pageSize;
3.【Dao层】
/*** 持久层Dao接口 */
@Mapper
public interface CheckGroupDao
public Page<CheckGroup> selectByCondition(String queryString);
4.【xxxMapper.xml映射文件】
<!--动态查询:分页查询-->
<select id="selectByCondition" parameterType="string" resultType="com.apesource.graduation_project.pojo.CheckGroup">
select * from t_checkgroup
<if test="value != null and value.length > 0">
where code = #value or name = #value or helpCode = #value
</if>
</select>
5.【Service层】
@Override
public PageResult pageQuery(Integer currentPage, Integer pageSize, String queryString)
PageHelper.startPage(currentPage, pageSize);
Page<CheckGroup> page = checkGroupDao.selectByCondition(queryString);
return new PageResult(page.getTotal(), page.getResult());
6. 【Controller层】
//分页查询
@PostMapping("/findPage")
public PageResult findPage(@RequestBody QueryPageBean queryPageBean)
try
PageResult pageResult = checkGroupService.pageQuery(queryPageBean.getCurrentPage(),queryPageBean.getPageSize(),queryPageBean.getQueryString());
return pageResult;
catch (Exception e)
return null;
mybatis分页查询怎么做
参考技术A 一、内存分页,使用RowBounds类,但这种方式不推荐,基本不用,所以此方式集成省略。二、自定义实现,代码量比较少,简单,比较灵活。以下为具体的集成步骤:
1、在User.xml中加入select节点,并组装分页SQ 参考技术B package cn.tsjinrong.fastfile.util;
/**
* @ClassName: Page
* @Description: TODO(分页组件的父类,用来封装分页的 通用内容和逻辑)
* @author zhanghaiyang
* @date 2016年1月14日 下午12:37:55
* @Copyright © 2016上海通善互联网金融信息服务有限公司
*/
public class Page
// 用户输入的分页条件
private int currentPage = 1; // 当前页
private int pageSize = 15; // 每页最大行数
// 用于实现分页SQL的条件,是根据用户输入条件计算而来的
private int begin;
private int end;
// 自动计算出的总行数
private int rows;
// 根据总行数计算总页数,然后将总页数输出给页面
private int totalPage;
public int getRows()
return rows;
public void setRows(int rows)
this.rows = rows;
public int getTotalPage()
// 根据总行数,计算总页数
if (rows % pageSize == 0)
totalPage = rows / pageSize;
else
totalPage = rows / pageSize + 1;
return totalPage;
public void setTotalPage(int totalPage)
this.totalPage = totalPage;
public int getBegin()
// 在mapper.xml使用begin属性时,对其进行计算
begin = (currentPage - 1) * pageSize;
return begin;
public void setBegin(int begin)
this.begin = begin;
以上是关于Mybatis实现分页查询的主要内容,如果未能解决你的问题,请参考以下文章
sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询