一般办法
一般物理分页,即通过sql语句分页,都是在sql语句后面添加limit分页语句,在xml文件里传入分页的参数,再多配置一条sql,用于查询总数:
<select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper">
select * from student limit #{currIndex} , #{pageSize}
</select>
<select id="queryStudentsCount" resultType="java.lang.Integer" parameterType="java.util.Map">
select count(*) from student
</select>
再新建一个page对象,把需要的结果数据设值进去
mybaties-plus分页实现
分页有一个拦截器的分页插件,利用这个分页插件,不需要自己写拦截器就可以轻松实现分页查询: 分页插件配置
mapper实现
todoQuery封装的查询条件 TodoVo 封装的返回的页面要展示的字段项
- 一定要传递page参数,否则不能实现分页,查询sql 可以是多表联合查询的复杂语句。
/**
* <p>
* 任务表 Mapper 接口
* </p>
*
* @since 2022-04-25
*/
@Mapper
public interface TodoCustomMapper {
/**
* 查询代办任务列表
* @param todoTaskQuery
* @return
*/
List<TodoVo> selectTodoListByQuery(Page page, TodoQuery todoQuery);
}
xml
<select id="selectTodoListByQuery" resultType="com.liu.vo.TodoTaskVo">
SELECT
a.id,
a.system_code,
a.user_name,
a.user_id
FROM
表名 a
LEFT JOIN 表名 b on 连接条件
<where>
<if test="todoTaskQuery.genTimeEq!=null and todoTaskQuery.genTimeEq!=''">
and 条件
</if>
</where>
ORDER BY
xxxx
</select>
service层
public IPage<TodoVo> selectTodoListByQuery(TodoQuery todoQuery) {
if (ObjectUtil.isNull(todoQuery)){
todoQuery = new TodoQuery();
todoQuery.setLimit(10);
todoQuery.setPage(1);
}
Page<TodoVo> page = new Page<>(todoQuery.getPage(), todoQuery.getLimit());
List<TodoVo> todoVos = todoCustomMapper.selectTodoListByQuery(page, todoQuery);
page.setRecords(todoVos);
return page;
}
|