mysql数据库中使用mybatis的xml文件limit分页使用遇到的坑

数据库: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 list = dao.queryByList(params)

//mybatis中的sql:

 


//总记录数
Integer count = aService.coutByIdList(idList);







//每页记录数
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);

 

你可能感兴趣的:(mybatis,mysql,Java)