数据库:MySQL数据库
因为初次使用mybatis-plus的分页查询,有点不太不习惯,于是决定自己写个分页查询。
mysql中的分页查询语句,是使用limit来分页的:
select * from tablename limit a,b;//这句话的意思是从表tablename中查询,从第a+1条开始,共查询b条数据。
那么在这里,a和b的含义就要了解明白了,要不然就容易犯我的错(我刚开始理解的意思是,从a页开始,查询b条数据)。
概念清晰的话,涉及到分页,就需要了解几个计算公式了:
//总记录数=查询符合条件的总数 SELECT COUNT(1) FROM tablename WHERE 条件;
Integer count ;
//每页记录数=每页查询的条数,一般都是前端传过来的
Integer pageSize ;
//当前页数=当前页数,一般都是前端传过来的想要查询的哪页
Integer currPage ;
//总页数= (总记录数 + 每页记录数 - 1)/每页记录数
Integer totalPage = (count + pageSize - 1) / pageSize;
明白上面的几个概念之后,可以进行操作了。
请注意,sql语句不能写成:select * from tablename limit currPage ,pageSize ;//这是错误的
应该计算一下select * from tablename limit a,b;语句中的a(一定要注意,a不代表第几页,而是代表从a+1条开始),
a的计算:(当前页-1)* 每页记录数 ==> (currPage - 1) * pageSize
这样的话你的分页就可以啦。
我的分页数据也是自己封装回去的,可以参考下,我是用的是fastjson:
JSONObject jsonObject = new JSONObject();
jsonObject.put("totalCount", count);
jsonObject.put("pageSize", pageSize);
jsonObject.put("totalPage", totalPage);
jsonObject.put("currPage", currPage);
jsonObject.put("list", list);
样例代码:
//列表数据
......
String page = params.get("page").toString();
String limit = params.get("limit").toString();
int i = Integer.parseInt(page);
int b = Integer.parseInt(limit);
params.put("start",(i-1)*b);
List<Student> list = dao.queryByList(params)
//mybatis中的sql:
<select id="queryByList" resultMap="aMap">
select
<include refid="Base_Column_List"/>
from student where
<if test="ids != null">
teacher_id in
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item , jdbcType=INTEGER}
</foreach>
</if>
and enabled = 1
limit ${start},${limit};
</select>
//总记录数
Integer count = aService.coutByIdList(idList);
<select id="coutByhospitalIdList" resultType="java.lang.Integer">
SELECT COUNT(1) FROM student WHERE hospital_id in
<if test="list != null">
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item , jdbcType=INTEGER}
</foreach>
</if>
<if test="idcard != null and idcard != ''">
and idcard = #{idcard}
</if>
and enabled = 1
</select>
//每页记录数
Integer pageSize = Integer.parseInt(params.get("limit").toString());
//当前页数
Integer currPage = Integer.parseInt(params.get("page").toString());
//总页数
Integer totalPage = (count + pageSize - 1) / pageSize;
JSONObject jsonObject = new JSONObject();
jsonObject.put("totalCount", count);
jsonObject.put("pageSize", pageSize);
jsonObject.put("totalPage", totalPage);
jsonObject.put("currPage", currPage);
jsonObject.put("list", list);
return R.ok().put("data", jsonObject);