一般来说使用 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. Ubuntu安装Sublime Text 3

    终端命令行安装: Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo a ...

  2. Linux/Ubuntu正确卸载LXDE

    第一步: sudo apt-get remove lxde 第二步 sudo apt autoremove lxde

  3. jmeter使用问题——将接口返回变量存储成csv文件

    在使用jmeter做接口测试时,一整个jmx测试计划中,存在多个线程,多个接口的测试 但是接口可以分类,比如业务接口.查询接口.更新接口等 考虑自动化接口测试一般都是一次性的,有完整的闭环链路,一般步 ...

  4. tomcat用做图片服务器

    最近做了个小网站,就是用tinyce富文本编辑器,https://www.511easy.com/ 保持字体排版和图片 发现博客园的图片,一天之后就无法显示 就想着自己做一个图片服务器,上传图片到指定 ...

  5. 带新手玩转MVC——不讲道理就是干(下)

    带新手玩转MVC——不讲道理就是干(下) 前言:废话不多说,直接开干 完整案例演示 案例代码 LoginServlet package servlet; import domain.User; imp ...

  6. MyBatis映射,抛出Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'oid' in 'class java.lang.String'

    原因在于: 在MyBatis中使用动态语句的判断时,传入的参数(parameterType)为Java基本数据类型,获取的结果(resultType)为JavaBean对象,此时就会抛出该异常,此时可 ...

  7. PHP与ECMAScript_5_常用数组相关函数

    PHP ECMAScript 长度 $length = count($array) length = array.length       增 array_unshift($array, new1,n ...

  8. pyhthon字典练习题

    pyhthon字典练习题: 有如下集合: [11,22,33,44,55,66,77,88,99] 将所有大于55的值保存至第一个KEY值中,将所有小于55的值保存至第二个KEY值中.{"k ...

  9. Linux再学习(一)-学习路线规划

    1 抛弃旧文化,迎接Linux命令新文化 Linux第一步,从Windows思维,切换到Linux的"命令行+文件"模式 在Linux中,做什么都有相应命令.一般就在bin或者sb ...

  10. Mac OS 安装mysqlclient 遇到的坑~

    最近在学习Python, 因为Django连接mysql 需要安装mysqlclient, 但Mac安装遇到各种问题,这里记录一下,避免以后再踩坑. 1.   正常情况下,安装mysqlclient ...