基于PageHelper的分页查询
基于PageHelper的分页查询
‘PageHelper是基于java的一个开源框架,用于在MyBatis等持久层框架中方便地进行分页查询操作。它提供了一组简单易用的API和拦截器机制,可以帮助开发者快速集成和使用分页功能。
PageHelper的主要功能包括:
分页查询支持:PageHelper提供了直接在SQL语句中添加分页相关的信息,如页码、每页记录数等,从而实现分页查询功能。
参数解析和设置:PageHelper可以解析传入的查询参数,并自动设置分页的相关参数,无需手动计算和设置。
SQL拦截器:PageHelper通过自定义的SQL拦截器拦截和处理查询SQL,自动添加分页的SQL语句,实现分页查询。
排序支持:PageHelper还提供了对排序的支持,可以在分页查询中指定排序字段和排序方式。
分页信息返回:PageHelper会将查询结果封装在一个Page对象中,包含了分页的相关信息,如总记录数、总页数等。
PageHelper的底层原理是拦截,拦截需要进行分页查询的SQL请求,读取用户传入参数,自主构造分页SQL语句。
它的使用很便利,大大简化了分页查询的操作步骤,因此在企业开发中也比较常见,作为一名合格的开发者,我们要熟练的掌握基于PageHelper的分页查询操作。
maven坐标
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
主要看一下serviceImpl和mapper的xml文件
先调用PageHelper的stratPage函数,传递要查询的页码以及每一页的数据条数
再调用pageQuery方法进行实际的分页查询操作。这里的employeeMapper是对应的Mybatis Mapper接口,pageQuery()方法是其中定义的一个查询方法,用于执行分页查询操作。
然后,通过page.getTotal方法获取查询结果的总数,即满足条件的数据总条数。
通过 方法获取当前页的数据列表,即符合分页条件的数据集合。
最后,将总数和当前页的数据列表封装成一个PageResult对象,并返回给调用方。
public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());Page<DishVO> page = dishMapper.pageQuery(dishPageQueryDTO);return new PageResult(page.getTotal(), page.getResult());}
<select id="pageQuery" resultType="com.sky.vo.DishVO">select d.*,c.name as categoryName from dish d left outer join category c on d.category_id = c.id<where><if test="name != null and name != ''">and d.name like concat('%',#{name},'%')</if><if test="categoryId != null">and d.category_id = #{categoryId}</if><if test="status != null">and d.status = #{status}</if></where>order by d.create_time desc</select>
而下面的xml文件配合左外连接和动态sql完成动态分页
select d.*,c.name as categoryName
:查询菜品表dish
的所有字段,并把分类表category
的名字字段命名为categoryName
left outer join
:把分类表连接进来,哪怕 dish 没有分类也查得出来(因为是左外连接)<where>
标签:- 会自动在 SQL 中添加
WHERE
关键字; - 如果你拼接的
and xxx
条件前面没有内容,它会帮你清理多余的and
,保持 SQL 正确
- 会自动在 SQL 中添加
<if>
标签:- 表示如果传入参数中
name
不为空,就加上模糊查询d.name like '%xxx%'
- 如果
categoryId
和status
有值,也拼上对应条件
- 表示如果传入参数中
- 最后
order by d.create_time desc
是排序,创建时间降序排列
动态 SQL 优点 | 说明 |
---|---|
灵活 | 条件多少不确定时可自由拼接 |
可读性强 | 语法直观,类似 HTML 标签结构 |
可维护性强 | 比写多个 SQL 方法更清晰 |