美文网首页
mybatis一对多分页查询

mybatis一对多分页查询

作者: __简单点__ | 来源:发表于2021-01-08 16:56 被阅读0次

    https://zhuanlan.zhihu.com/p/150228327

    一:mybatis 优雅写法

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

    PageHelper.startPage(page, size);

    <select id="selectSelective" resultMap="BaseResultMap"//关键1>

    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" />

       <collection property="cmsStoreImages"  关键二ofType="com.bear.sh.cloud.service.somhec.domain.CmsStoreImage" select="queryImagesList" column="id"/>//column 是从上面的id获取值然后给select  的queryImagesList传参

    <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里去查对应的多条记录  

    二:通用sql写法

    如果使用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一对多分页查询

          本文链接:https://www.haomeiwen.com/subject/fpyfaktx.html