mybatis分页

这篇博客介绍了在MyBatis中使用LIMIT进行分页查询时常见的错误及解决方法。错误的写法是在XML映射文件中直接进行算术运算,而正确的做法是使用Map参数,通过Query类封装分页参数,避免在LIMIT后面直接进行计算。同时展示了Query类的实现,用于处理分页参数,并在控制器中如何调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.常见错误:

mapping文件中写:

 错误写法:   LIMIT (#{pageNo}-1)*#{pageSize},#{pageSize}; // 错误 

 原因:在MyBatis中LIMIT之后的语句不允许的变量不允许进行算数运算,会报错。

正确写法: LIMIT ${(pageNo-1)*pageSize},${pageSize}; (正确)

-----------------------------------------------------------------------------------------------------

其中可以在传递参数的时候进行封装,例如:

1、mapping中使用

<if test="offset != null and limit != null">
            limit #{offset}, #{limit}
  </if>

2、创建一个query类

package com.uvksoft.common.util;

import java.util.LinkedHashMap;
import java.util.Map;

  • /**

 * 查询参数
 *
 * @author LBP
 * @date 2018-02-02 11:15
 */
public class Query extends LinkedHashMap<String, Object> {
    private static final long serialVersionUID = 1L;
    // 当前页码
    private int page;
    // 每页条数
    private int limit;

    public Query(Map<String, Object> params) {
        this.putAll(params);

        // 分页参数
        Object pageStr = params.get("page");
        Object limitStr = params.get("limit");
        if (pageStr != null && limitStr != null) {
            this.page = Integer.parseInt(pageStr.toString());
            this.limit = Integer.parseInt(limitStr.toString());
        } else {// 默认值
            this.page = 1;
            this.limit = 10000;
        }
        this.put("offset", (page - 1) * limit);
        this.put("page", page);
        this.put("limit", limit);

    }

    public int getPage() {
        return Integer.valueOf(this.get("page").toString());
    }

    public void setPage(int page) {
        this.page = page;
        this.put("page", this.page);
        this.put("offset", (page - 1) * limit);
    }

    public int getLimit() {
        return Integer.valueOf(this.get("limit").toString());
    }

    public void setLimit(int limit) {
        this.limit = limit;
        this.put("limit", this.limit);
    }
}

 

3、在控制层传递过来参数时候,对参数传入到Query中

/**
     * 代理商动态
     * @param params
     * @return
     */
    @RequestMapping("/agent/wxapp/dynamicList.do")
    public Bmp list(@RequestParam Map<String, Object> params) {
        Query query = new Query(params); //将参数传入到Query做相关的处理
        List<AgentDynamicSet> list = new ArrayList<AgentDynamicSet>();
        list = agentDynamicSetService.findAgentDynamicList(query);
        int totalCounts = agentDynamicSetService.findTotolCount(params);
        Bmp bmp = new Bmp(totalCounts, "list", list, 200, "");
        return bmp;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值