SpringBoot+MyBatis分页查询
一、概述
做了一个小demo查询订单列表,自己做测试的时候可能就几条订单,但是一旦订单多起来的时候就需要用到分页查询了。不然一次性加载太多,前后端都受不了。
这里使用mybatis提供的分页插件来做。
二、实例
1.导入SpringBoot和MyBatis
版本还是用2.x <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.14</version> <relativePath/> <!-- lookup parent from repository --> </parent>
//加入web功能
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
//这里导入了mybatis-plus当然你也可以导入mybatis,因为mybatis-plus包含了mybatis所以不受影响 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1</version> </dependency>
2.导入分页插件
<!-- mybatis分页插件-->
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
3.以订单列表为例,编写service测试分页。其实就把当前页(pageNum)和每页多少条(pageSize)喂给分页插件
@Override public ResultOk getOrders(QueryOrderParam param) { PageResult result = PageUtil.getPageResult(getPageInfo(param)); return ResultOk.ok(200, "分页查询订单列表", result); } /** * 调用分页插件完成分页 * * @param queryOrderParam * @return */ private PageInfo<VideoOrder> getPageInfo(QueryOrderParam queryOrderParam) { int pageNum = queryOrderParam.getPageNum(); int pageSize = queryOrderParam.getPageSize(); PageHelper.startPage(pageNum, pageSize); List<VideoOrder> videos = videoOrderMapper.getOrders(queryOrderParam); return new PageInfo<VideoOrder>(videos); }
4.PageUtil分页插件封装类
public class PageUtil { /** * 将分页信息封装到统一的接口 * * @param pageInfo * @return */ public static PageResult getPageResult(PageInfo<?> pageInfo) { PageResult pageResult = new PageResult(); pageResult.setPageNum(pageInfo.getPageNum()); pageResult.setPageSize(pageInfo.getPageSize()); pageResult.setTotalSize(pageInfo.getTotal()); pageResult.setTotalPages(pageInfo.getPages()); pageResult.setContent(pageInfo.getList()); return pageResult; } }
5.你自己的sql
<!--分页查询订单-->
<sql id="getOrders_sql_id">
o.id,o.out_trade_no,o.state,o.total_fee,o.video_id,o.video_title,o.user_id,
u.id as uid,u.name,u.head_img,u.phone,
v.id as vid,v.title,v.summary,v.cover_img,v.price,v.point
</sql>
<resultMap id="getOrdersMap" type="com.tony.cursor.entity.VideoOrder">
<id property="id" column="id"/>
<result property="outTradeNo" column="out_trade_no"/>
<result property="state" column="state"/>
<result property="totalFee" column="total_fee"/>
<result property="videoId" column="video_id"/>
<result property="videoTitle" column="video_title"/>
<result property="userId" column="user_id"/>
<association property="user" javaType="com.tony.cursor.entity.User">
<id property="id" column="uid"/>
<result property="name" column="name"/>
<result property="headImg" column="head_img"/>
<result property="phone" column="phone"/>
</association>
<association property="video" javaType="com.tony.cursor.entity.Video">
<id property="id" column="vid"/>
<result property="title" column="title"/>
<result property="summary" column="summary"/>
<result property="coverImg" column="cover_img"/>
<result property="price" column="price"/>
<result property="point" column="point"/>
</association>
</resultMap>
<select id="getOrders" resultMap="getOrdersMap" resultType="com.tony.cursor.entity.VideoOrder">
select
<include refid="getOrders_sql_id"/>
from video_order o left join user u on o.user_id=u.id left join video v on o.video_id=v.id
<if test="param.title!=null and param.title !=''">
where video_title like concat('%',#{param.title},'%')
</if>
</select>
6.用postman测试,结果如下

浙公网安备 33010602011771号