Mybatis-plus一对多与分页问题

Mybatis-plus一对多与分页问题

1.问题说明

今天工作时,在使用mp一对多并且分页时,发现返回的分页列表数据(数量)不对

Class A {

​ private String name;

​ private List < B > bList;

}

貌似是这个问题:(记不清了)

比如这里查询A,如果使用直接映射,那么bList的每一个B对象都会算一条数据;比如查第一页,每页五条数据,就会出现查出一个A,四个B的这些情况,这它也算每页5条(其实就只查到一个A)

2.原因

mybatis-plus一对多分页时,应该使用子查询的映射方式,使用直接映射就会出错

所以直接映射适用于一对一;

子查询映射使用于一对多;

不知道是不是自己太愚笨。。。。。

3.使用子查询映射:

sql有些烂,别介意

Class A {

​ private String name;

​ private List < B > bList;

}

1.先主查询(查A类)

<select id="getPage" resultType="com.yourfun.manager.domain.vo.ConversationVo" resultMap="peopleMap"
        parameterType="com.yourfun.manager.service.query.ConversationQuery">
    select
        c.id,
        c.party_organization_id partyOrganizationId,
        c.conversation_date,
        c.theme,
        c.content,
        c.status,
        po.name partyOrganizationName
    from
        conversation c,
        party_organization po
    <where>
        c.party_organization_id = #{query.partyOrganizationId}
        and
        <if test="query.keyword != null and query.keyword != '' ">theme like CONCAT('%',#{query.keyword},'%') and
        </if>
        c.party_organization_id = po.id
        and
        c.is_deleted = 0
        and
        po.is_deleted = 0
    </where>
    order by c.conversation_date desc
</select>

2.再映射,使用collection,因为是一对多

<resultMap id="peopleMap" type="com.yourfun.manager.domain.vo.ConversationVo">
    <id column="id" property="id"/>
    <result column="partyOrganizationId" property="partyOrganizationId"/>
    <result column="partyOrganizationName" property="partyOrganizationName"/>
    <result column="conversation_date" property="conversationDate"/>
    <result column="theme" property="theme"/>
    <result column="content" property="content"/>
    <result column="status" property="status"/>
    <collection property="peopleList" ofType="com.yourfun.manager.domain.vo.ConversationPeopleVo" select="queryPeople" column="id">
    </collection>
</resultMap>

3.子查询(查B类)

<select id="queryPeople" resultType="com.yourfun.manager.domain.vo.ConversationPeopleVo">
    select
        type,name,id_card
    from
        conversation_people
    where
        conversation_id = #{id}
</select>
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了我的架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值