mybatis一对多分页查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis一对多分页查询相关的知识,希望对你有一定的参考价值。

参考技术A 例如 一个门店  对应多张图片   可正常使用PageHelper分页

PageHelper.startPage(page, size);

select

*

from cms_store 

limit 10,10  //正常单表查分页即可

</select>

<resultMap id="BaseResultMap" type="com.bear.sh.cloud.service.somhec.domain.CmsStore">

<result column="id" jdbcType="INTEGER" property="id" />

<result column="enable_status" jdbcType="INTEGER" property="enableStatus" />

<result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />

<select id="queryImagesList" resultType="com.bear.sh.cloud.service.somhec.domain.CmsStoreImage">

    select<include refid="Base_Image_Column_List">

    from cms_store_image csi

where csi.store_id = #id

</select>

即1条主表记录 然后封装resultMap 里的cmsStoreImages属性时,会拿这条记录的id(不限于id y要拿什么值 输什么column)(所以column的值很重要!!) 来到select里去查对应的多条记录  

如果使用left join 一对多查询  则会产生多条记录  例如一个门店有3条图片记录

则本来要查的门店应该是一条不重复记录 结果统计数据的时候却统计了3条 虽然最后mybatis会封装到1条主表数据里

这会造成两个问题: 1:总条数不准 2查询10条主表数据 mybatis组合封装后只返回了 三四条主表数据

解决:先对主表进行分页查询 然后left join 从表

select * from

(select * from cms_store  limit 10) cs

left join cms_store_image csi on cs.id = csi.store_id  即可查询一对多且 一的条数为10条

总记录数需要另外统计

以上是关于mybatis一对多分页查询的主要内容,如果未能解决你的问题,请参考以下文章

mybatis分页-RowBounds - 草稿

MybatisPlus多表连接查询一对多分页查询数据

一对多分页的SQL到底应该怎么写?

Mybatis Plus一对多联表查询及分页解决方案

关于mybatis物理分页的问题,求大神帮忙看看

Mybatis下collections使用pageHelper进行分页