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实现分页查询的主要内容,如果未能解决你的问题,请参考以下文章

mybatis oracle 分页+模糊查询

基于 mybatis 的分页和过滤查询

sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询

sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询

java mybatis 分页模糊查询页面怎么写

springboot结合Mybatis和mybatis-plus实现分页查询的四种使用方式