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<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);

 

发布了49 篇原创文章 · 获赞 0 · 访问量 3323
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览