分页插件PageHelper的使用及优化

介绍PageHelper是mybatis框架上的一款分页插件 。通过它友好的api设计,可省去写count,分页sql嵌套的繁琐工作 。同时插件内部兼容不同数据库间(MySQL、Oracle等)的分页实现 。开发者只需关注具体业务sql,其他的统计封装交给PageHelper插件动态处理 。
作为JAVA后端开发者,这是一款必不可少的基础组件,大大减少了手动写分页列表查询的工作量 。
官方开源地址:
GitHub - pagehelper/Mybatis-PageHelper: Mybatis通用分页插件
插件集成添加maven依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.10</version></dependency>添加mybatis配置插件
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>代码使用
表模型-用户表
CREATE TABLE `sys_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_name` varchar(255) NOT NULL COMMENT '登录用户名',`password` varchar(255) NOT NULL COMMENT '登录密码',`telephone` varchar(255) DEFAULT NULL COMMENT '手机号',`idno` varchar(255) DEFAULT NULL COMMENT '身份证号',`name` varchar(255) DEFAULT NULL COMMENT '真实姓名',`sex` tinyint(1) DEFAULT NULL COMMENT '性别:0:女, 1:男',`age` int(11) DEFAULT NULL COMMENT '年龄',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`create_by` varchar(255) DEFAULT NULL COMMENT '创建人',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',`update_by` varchar(255) DEFAULT NULL COMMENT '更新人',PRIMARY KEY (`id`),UNIQUE KEY `idx_usr` (`user_name`) USING BTREE,KEY `idx_crt_time` (`create_time`) USING BTREE,KEY `idx_phone` (`telephone`) USING BTREE,KEY `idx_idno` (`idno`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;表模型-订单表
CREATE TABLE `order` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单id',`user_id` bigint(20) unsigned NOT NULL COMMENT '用户id',`product_id` bigint(20) unsigned NOT NULL COMMENT '产品id',`price` decimal(8,2) DEFAULT '0.00' COMMENT '商品价格',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`create_by` varchar(255) DEFAULT NULL COMMENT '创建人',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`update_by` varchar(255) DEFAULT NULL COMMENT '更新人',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;查订单信息order-mApper
<!-- 通用查询映射结果 --><resultMap id="BaseResultMap" type="com.***.user.model.Order"><id column="id" property="id" /><result column="user_id" property="userId" /><result column="product_id" property="productId" /><result column="price" property="price" /><result column="create_time" property="createTime" /><result column="create_by" property="createBy" /><result column="update_time" property="updateTime" /><result column="update_by" property="updateBy" /></resultMap><resultMap id="UserOrderResultMap" type="com.***.user.model.UserOrder" extends="BaseResultMap"><result column="user_name" property="userName" /><result column="user_mobile" property="userMobile" /></resultMap><!-- 通用查询结果列 --><sql id="Base_Column_List">id, user_id, product_id, price, create_time, create_by, update_time, update_by</sql><sql id="findOrderByUserId_from_where" >from `order` o left join sys_user uon u.id=o.user_id</sql><!-- 分页查询对应订单和用户信息--><select id="findOrderByUserId" resultMap="UserOrderResultMap">select u.user_name,u.telephone, o.id, o.user_id, o.product_id, o.price, o.create_time, o.create_by, o.update_time, o.update_by<include refid="findOrderByUserId_from_where" />order by o.create_time desc</select>OrderMapper类
public interface OrderMapper extends BaseMapper<Order> {List<UserOrder> findOrderByUserId();}PageHelper测试类
@SpringBootTest@RunWith(SpringRunner.class)@Slf4jpublic class OrderServiceImplTest {@Autowiredprivate IOrderService orderService;@Testpublic void testFindUserOrderService(){//PageHelper分页静态类.第一个参数当前页码从1开始,第二个参数每页记录数.PageHelper.startPage(1,3);List<UserOrder> userOrders = this.orderService.findOrderByUserId();//2.PageInfo<T> 封装返回业务对象,构建分页列表对象PageInfo<UserOrder> pageInfo = new PageInfo(userOrders);log.info("---findOrderByUserId page, total count is {}, list is {}",pageInfo.getTotal(),JSON.toJSONString(pageInfo.getList()));}}


推荐阅读