一般来说使用 PageHelper 能解决绝大多数的分页问题,相关使用可在博客园上搜索,能找到很多资料。

  之前我在做SpringBoot 项目时遇到这样一个问题,就是当一对多联合查询时需要分页的情况下,使用 PageHelper 做不到对一来进行分页,而是对查询结果做的分页。

  后来经过查找相关资料,找到了一个使用 PageHelper 根据一来进行分页的一对多联合查询,方法就是嵌套子查询,这样的话分页结果就是需要的效果。

  特此将相关代码记录一下,备忘。

  这里使用常见的例子 商品与商品信息 ,在MySql数据库建立两张相对应的表,

CREATE TABLE `item` (
`item_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品编号',
`img_url` varchar(500) NOT NULL DEFAULT '' COMMENT '图片地址',
`title` varchar(1000) NOT NULL COMMENT '标题',
`price` varchar(500) NOT NULL COMMENT '价格',
`item_type` varchar(30) NOT NULL COMMENT '类别',
`quantity` bigint(20) NOT NULL COMMENT '数量',
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品';
CREATE TABLE `item_sku` (
`sku_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '规格ID',
`item_id` varchar(30) NOT NULL COMMENT '商品ID',
`sku_price` varchar(100) NOT NULL DEFAULT '' COMMENT 'SKU价格',
`sku_unique_code` varchar(100) NOT NULL COMMENT '规格唯一标识',
`quantity` bigint(20) NOT NULL COMMENT '数量',
PRIMARY KEY (`sku_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品SKU';

  在项目中新建相关的model类和mapper接口与xml文件,在xml文件中添加 resultMap

下方的property字段对应关系说明 <!--property字段对应的itemSkus必须在结果集中List的字段名 如:private List<ItemSku> itemSkus;-->

    <resultMap id="item" type="com.demo.dal.entity.pojo.Item">
<result column="item_id" jdbcType="VARCHAR" property="itemId"/>
<result column="img_url" jdbcType="VARCHAR" property="imgUrl"/>
<result column="title" jdbcType="VARCHAR" property="title"/>
<result column="price" jdbcType="VARCHAR" property="price"/>
<result column="item_type" jdbcType="VARCHAR" property="itemType"/>
<result column="quantity" jdbcType="BIGINT" property="quantity"/> <collection property="itemSkus" ofType="com.demo.dal.entity.pojo.ItemSku"
javaType="java.util.List" select="getSkuByItemId"
column="{itemId=item_Id}"><!--{itemId=item_Id,quantity=quantity} 要查询的列 必须在父查询的select字段中--> <!--property字段对应的itemSkus必须在结果集中List的字段名 如:private List<ItemSku> itemSkus;-->
<result column="sku_id" jdbcType="VARCHAR" property="skuId"/>
<result column="sku_price" jdbcType="VARCHAR" property="skuPrice"/>
<result column="sku_unique_code" jdbcType="VARCHAR" property="skuUniqueCode"/>
<result column="quantity" jdbcType="BIGINT" property="quantity"/>
</collection>
</resultMap>

  主查询语句 selectItemAndSku

<select id="selectItemAndSku" resultMap="item" parameterType="map">
SELECT
s1.item_id,
s1.title,
s1.img_url,
s1.item_type,
s1.price,
s1.quantity,
FROM
item s1
<where>
<if test="title != null and title != ''">
AND s1.title LIKE '%${title}%'
</if>
<if test="itemId != null and itemId != ''">
AND s1.item_id = '${itemId}'
</if>
</where>
order by item_id desc
</select>

  子嵌套查询语句 getSkuByItemId

<select id="getSkuByItemId" parameterType="map"
resultType="map">
select s2.sku_id,
s2.sku_price,
s2.sku_unique_code,
s2.quantity,
from item_sku s2
where
s2.item_id = #{itemId}
ORDER BY s2.sku_id
</select>

  当这些都完成后,在mapper接口文件中新添加这样一个方法:  List<Item> selectItemAndSku(Map<String, Object> map);

  然后在service实现类中就可以注入mapper接口类,然后使用分页插件来进行分页了。

示例代码:

  PageInfo<Item> pageInfo =
PageHelper.startPage(page, pageSize)
.doSelectPageInfo(
() ->
itemDao.selectItemAndSku(map);//JDK 8.0以上的语法 //List<Item> list = PageHelper.startPage(page, pageSize);
//itemDao.selectItemAndSku(map);
//PageInfo<Item> pageInfo = new PageInfo<>(list); //通用写法
pageInfo 就是分页出来的结果。通过controller返回出去看看结果✿

SpringBoot Mybatis解决使用PageHelper一对多分页问题的更多相关文章

  1. Mybatis中使用PageHelper插件进行分页

    分页的场景比较常见,下面主要介绍一下使用PageHelper插件进行分页操作: 一.概述: PageHelper支持对mybatis进行分页操作,项目在github地址: https://github ...

  2. spring boot +Thymeleaf+mybatis 集成通用PageHelper,做分页

    controller: /**  * 分页查询用户  * @param request  * @param response  * @return  * @throws Exception  */ @ ...

  3. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页

    SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页 **SpringBoot+Mybatis使用Pagehelper分页插件自动分页,非常好用,不用在自己去计算和组装了. ...

  4. SpringBoot+Mybatis+PageHelper实现分页

    SpringBoot+Mybatis+PageHelper实现分页 mybatis自己没有分页功能,我们可以通过PageHelper工具来实现分页,非常简单方便 第一步:添加依赖 <depend ...

  5. spring-boot + mybatis +pagehelper 使用分页

    转自:https://segmentfault.com/a/1190000015668715?utm_medium=referral&utm_source=tuicool 最近自己搭建一个sp ...

  6. springboot结合mybatis使用pageHelper插件进行分页查询

    1.pom相关依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...

  7. springboot mybatis pagehelper 分页问题

    1:添加依赖 compile group: 'com.github.pagehelper', name: 'pagehelper-spring-boot-starter', version: '1.2 ...

  8. springboot+mybatis+pagehelper

    springboot+mybatis+pagehelper整合 springboot   版本2.1.2.RELEASE mybatis  版本3.5 pagehelper 版本5.18 支持在map ...

  9. springboot + mybatis配置分页插件

    一:使用pagehelper配置分页插件 1:首先配置springboot +mybatis框架  参考:http://www.cnblogs.com/liyafei/p/7911549.html 2 ...

随机推荐

  1. backbone之路由锚点的替换

    1.需求 由于项目一开始做的时候不甚完善,所有的网页没有路由功能,导致一些搜索结果在页面跳转之后,没有被记录下来,在页面跳转之后回退,得到的是页面最原始的结果,没有指定的搜索条件.最近项目的在完善这些 ...

  2. 第二篇:"空空如也"的博客应用

    文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 建立博客应用 我们已经建立了 django 博客的项目工程,并且成功地运行了它.不过到目前为止这一切都还只是 django 为 ...

  3. linux初学者-MariaDB图形管理篇

     linux初学者-MariaDB图形管理篇 MariaDB不仅有文本管理方式,也有借助工具的图形管理方式.其图形管理的工具是"phpmyadmin".这个软件可以在"p ...

  4. Java emoji持久化mysql

    好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf-8字符集保存不了保存不了表情字符,这是为什么呢?因为普通的字符 ...

  5. 程序员的长安十二时辰:Java实现从Google oauth2.0认证调用谷歌内部api

    最近公司在做一个app购买的功能,主要思路就是客户在app上购买套餐以后,Google自动推送消息到Java后端,然后Java后端通过订单的token获取订单信息,保存到数据库. Java后端要获取订 ...

  6. JSP使用分层实现业务处理

    在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection co ...

  7. 1.4.1python下载网页(每天一更)

    # -*- coding: utf-8 -*- ''' Created on 2019年4月27日 @author: lenovo ''' # import urllib3 # def downloa ...

  8. oracle 创建表空间,用户并授权

    1. 查看所有表空间及存储路径 select file_name, tablespace_name from dba_data_files; 2. 创建表空间 CREATE TABLESPACE xs ...

  9. react学习(二)--元素渲染

    元素用来描述你在屏幕上看到的内容: const element = <h1>Hello, world</h1>; 与浏览器的 DOM 元素不同,React 当中的元素事实上是普 ...

  10. Go中sync包学习

    前面刚讲到goroutine和channel,通过goroutine启动一个协程,通过channel的方式在多个goroutine中传递消息来保证并发安全.今天我们来学习sync包,这个包是Go提供的 ...