前景: 毕设在使用javaType映射时一直没发现问题,后来需要映射出结果集中的l一个属性ist集合,发现问题
在使用多表联查并且使用collection标签映射结果后,无论是使用原生limit分页还是PageHelper(底层依旧是limit) 都是对查询结果直接分页,并不是对映射后的结果分页
以下是我的sql
SELECT v.id,v.title,v.brief,v.publish_date,v.path,v.cover,v.user_id,v.group_id,
c.id cid ,c.category_name cname,
l.id lid ,l.name lname
-- FROM video v
FROM (SELECT * FROM video
<if test="null != page.pageNum and null != page.pageSize">
LIMIT #{page.pageNum},#{page.pageSize}
</if>
) v
LEFT JOIN category c ON v.category_id = c.id AND c.delete_flag = 0 AND c.is_instrument = 0
LEFT JOIN label_site ls ON v.id = ls.use_site AND ls.delete_flag = 0
LEFT JOIN label l ON ls.label_id = l.id AND l.delete_flag = 0
<where>
v.delete_flag = 0
<if test="page!=null">
<if test="page.keyword != null and '' != page.keyword">
AND (v.title LIKE CONCAT('%',#{page.keyword},'%') OR l.name LIKE CONCAT('%',#{page.keyword},'%'))
</if>
</if>
<!--<if test="null != page.pageNum and null != page.pageSize">
LIMIT #{page.pageNum},#{page.pageSize}
</if>-->
</where>
尝试解决后发现如果 我没有对 label表也进行同时关键词查询,那么使用我上方提前对主表进行分页在进行连接那么是没问题的。
-- FROM video v
FROM (SELECT * FROM video
<if test="null != page.pageNum and null != page.pageSize">
LIMIT #{page.pageNum},#{page.pageSize}
</if>
) v
无奈我的解决思路:
- 查询不用limit , java假分页 查询出结果后分页
- 使用主表提前分页思路,不关联标签表。在查询出结果后,再次查询标签表使用label表中use_site 为ke封装成map集合,在嵌入分页后的视频结果集中。
有什么好的办法或是思路 大家可以评论下!!~!