今天工作时,在使用mp一对多并且分页时,发现返回的分页列表数据(数量)不对
Class A {
private String name;
private List < B > bList;
}
貌似是这个问题:(记不清了)
比如这里查询A,如果使用直接映射,那么bList的每一个B对象都会算一条数据;比如查第一页,每页五条数据,就会出现查出一个A,四个B的这些情况,这它也算每页5条(其实就只查到一个A)
mybatis-plus一对多分页时,应该使用子查询的映射方式,使用直接映射就会出错
所以直接映射适用于一对一;
子查询映射使用于一对多;
不知道是不是自己太愚笨。。。。。
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>
因篇幅问题不能全部显示,请点此查看更多更全内容