搜索
您的当前位置:首页正文

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>

因篇幅问题不能全部显示,请点此查看更多更全内容

Top