前言:对于多表联查需要手写SQL实现分页查询
实现思路:构建好page条件和查询后,,mapper哪里page不需要加@Param注解,查询条件需要加 ,只需要手写查询的语句,总记录数不需要再手写。
主要代码:
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//sql实现
//pageNo,pageSize
Page<InteractionQuestion> questionPage = new Page<>(query.getPageNo(), query.getPageSize());
//分页page条件,其他参数
Page<InteractionQuestion> pageData = this.baseMapper.queryQuestionPageAdmin(questionPage,query,coursesIds);
mapper层
/**
* 条件分页查询
* @param questionPage
* @param query
* @param coursesIds
* @return
*/
Page<InteractionQuestion> queryQuestionPageAdmin(Page<InteractionQuestion> questionPage,
@Param("query") QuestionAdminPageQuery query,
@Param("coursesIds") List<Long> coursesIds);
xml层
<!--条件分页查询-->
<select id="queryQuestionPageAdmin" resultType="com.tianji.learning.domain.po.InteractionQuestion">
SELECT
*
FROM
interaction_question
WHERE 1=1
<if test="query.status != null and query.status != ''">
AND status = #{query.status}
</if>
<if test="query.beginTime != null and query.beginTime != ''">
AND create_time >= #{query.beginTime}
</if>
<if test="query.endTime != null and query.endTime != ''">
AND create_time <= #{query.endTime}
</if>
<if test="coursesIds != null and coursesIds.size() > 0'">
AND course_id IN
<foreach collection="coursesIds" item="coursesId" open="(" separator="," close=")">
#{coursesId}
</foreach>
</if>
</select>