MyBatis limit分页设置
错误的写法: <select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap">
SELECT
a.*,
FROM
tb_user a
WHERE =
<if test="ids != null and ids.size()!=0">
AND a.id IN
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="statusList != null and statusList.size()!=0">
AND a.status IN
<foreach collection="statusList" item="status" index="index"
open="(" close=")" separator=",">
#{status}
</foreach>
</if>
ORDER BY a.create_time desc
LIMIT (#{pageNo}-)*#{pageSize},#{pageSize}; // 错误
</select>
在MyBatis中LIMIT之后的语句不允许的变量不允许进行算数运算,会报错。
正确的写法一:
<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap">
SELECT
a.*,
FROM
tb_user a
WHERE =
<if test="ids != null and ids.size()!=0">
AND a.id IN
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="statusList != null and statusList.size()!=0">
AND a.status IN
<foreach collection="statusList" item="status" index="index"
open="(" close=")" separator=",">
#{status}
</foreach>
</if>
ORDER BY a.create_time desc
LIMIT ${(pageNo-)*pageSize},${pageSize}; (正确)
</select>
正确的写法二:(推荐)
<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap">
SELECT
a.*,
FROM
tb_user a
WHERE =
<if test="ids != null and ids.size()!=0">
AND a.id IN
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="statusList != null and statusList.size()!=0">
AND a.status IN
<foreach collection="statusList" item="status" index="index"
open="(" close=")" separator=",">
#{status}
</foreach>
</if>
ORDER BY a.create_time desc
LIMIT #{offSet},#{limit}; (推荐,代码层可控)
</select>
分析:方法二的写法,需要再请求参数中额外设置两个get函数,如下:
@Data
public class QueryParameterVO { private List<String> ids; private List<Integer> statusList; // 前端传入的页码
private int pageNo; // 从1开始 // 每页的条数
private int pageSize; // 数据库的偏移
private int offSet; // 数据库的大小限制
private int limit; // 这里重写offSet和limit的get方法
public int getOffSet() {
return (pageNo-)*pageSize;
} public int getLimit() {
return pageSize;
}
}
错误的写法:
<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap"> SELECT a.*, FROM tb_user a WHERE 1=1 <if test="ids != null and ids.size()!=0"> AND a.id IN <foreach collection="ids" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </if> <if test="statusList != null and statusList.size()!=0"> AND a.status IN <foreach collection="statusList" item="status" index="index" open="(" close=")" separator=","> #{status} </foreach> </if> ORDER BY a.create_time desc LIMIT (#{pageNo}-1)*#{pageSize},#{pageSize}; // 错误</select>在MyBatis中LIMIT之后的语句不允许的变量不允许进行算数运算,会报错。正确的写法一:<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap"> SELECT a.*, FROM tb_user a WHERE 1=1 <if test="ids != null and ids.size()!=0"> AND a.id IN <foreach collection="ids" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </if> <if test="statusList != null and statusList.size()!=0"> AND a.status IN <foreach collection="statusList" item="status" index="index" open="(" close=")" separator=","> #{status} </foreach> </if> ORDER BY a.create_time desc LIMIT ${(pageNo-1)*pageSize},${pageSize}; (正确)</select>正确的写法二:(推荐)<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap"> SELECT a.*, FROM tb_user a WHERE 1=1 <if test="ids != null and ids.size()!=0"> AND a.id IN <foreach collection="ids" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </if> <if test="statusList != null and statusList.size()!=0"> AND a.status IN <foreach collection="statusList" item="status" index="index" open="(" close=")" separator=","> #{status} </foreach> </if> ORDER BY a.create_time desc LIMIT #{offSet},#{limit}; (推荐,代码层可控)</select>分析:方法二的写法,需要再请求参数中额外设置两个get函数,如下:@Datapublic class QueryParameterVO { private List<String> ids; private List<Integer> statusList; // 前端传入的页码 private int pageNo; // 从1开始 // 每页的条数 private int pageSize; // 数据库的偏移 private int offSet; // 数据库的大小限制 private int limit; // 这里重写offSet和limit的get方法 public int getOffSet() { return (pageNo-1)*pageSize; } public int getLimit() { return pageSize; }}
--------------------- 作者:timchen525 来源:CSDN 原文:https://blog.csdn.net/timchen525/article/details/79647666 版权声明:本文为博主原创文章,转载请附上博文链接!
MyBatis limit分页设置的更多相关文章
- Mybatis的ResultMap与limit分页查询
ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...
- Mybatis的分页插件PageHelper
Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper 文档地址:http://git.oschina. ...
- Mybatis 的分页插件PageHelper-4.1.1的使用
Mybatis 的分页插件 PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper 文档地址:http://git.oschin ...
- 权限管理系统之项目框架搭建并集成日志、mybatis和分页
前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...
- Mybatis3详解(十四)----Mybatis的分页
1.前言 在前面学习mybatis的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,但是前面都是简单的案例,所以查询的数据量不是很大,自然查询时没有任何压力,但是如果在实际的项目 ...
- spring boot(二)整合mybatis plus+ 分页插件 + 代码生成
先创建spring boot项目,不知道怎么创建项目的 可以看我上一篇文章 用到的环境 JDK8 .maven.lombok.mysql 5.7 swagger 是为了方便接口测试 一.Spring ...
- mybatis自定义分页拦截器
最近看了一下项目中代码,发现系统中使用的mybatis分页使用的是mybatis自带的分页,即使用RowBounds来进行分页,而这种分页是基于内存分页,即一次查出所有的数据,然后再返回分页需要的数据 ...
- mybatis 实现分页和过滤模糊查询
基于 mybatis 的分页和过滤查询 学习内容: 分页设计 1.分页需传递的参数 2.分页需展示的数据 3.分页需展示的数据的来源 3.1.结果总数与结果集(分页原理) 3.2.总页数.上一页和下一 ...
- 理解 Mybatis的分页插件 PageHelper
Mybatis + SpringMVC + Maven实现分页查询 (推荐采用的插件是PageHelper) 先看一下之前的这篇博客,这里推荐了 Mybatis 的分页方法. 按照上面的方法设置后,确 ...
随机推荐
- 各hbase版本对hadoop各版本的支持情况
http://hbase.apache.org/book/configuration.html#basic.prerequisites HBase-0.94.x HBase-0.98.x (Sup ...
- Seaslog安装和参数配置
详细文档访问:https://github.com/Neeke/SeasLog/blob/master/README_zh.md 源码安装步骤: 1.先下载Seaslog源码,下载地址:http:// ...
- Android 手动调用 返回键
有人想通过下面代码来实现手动调用返回键,很可惜会出现空指针异常. this.onKeyDown(KeyEvent.KEYCODE_BACK, null); 我们可以通过调用 onBackPressed ...
- 【C语言】符号优先级
一. 问题的引出 今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错. 题目:如下函数,在32bit系统foo(2^31-3)的值是: Int foo(int x) { return x&a ...
- google全球地址
IP Addresses of Google Global Cache www.kookle.co.nr Bulgaria 93.123.23.1 93.123.23.2 93.123.23.3 93 ...
- 12C配置EM Express的https端口
1.启动监听并查看监听信息 $ lsnrctl stat ora12 LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-FEB-2017 ...
- openwrt 水星mw4530r-v1 搞搞搞
感觉周围最实用的搞硬件非路由器莫属,可惜配置都不咋的高,选择水星这款就是看中它的性价比和openwrt的支持,真乃刷机神器啊,还可以挂载usb就更绝了,价格没得说. 另外128mb的rom对大部分功能 ...
- VirtualBox 端口转发 SSH
在服务器上安装VirtualBox并配置转发: VirtualBox网络连接方式,选择默认的NAT连接方式. 在下面有个 “端口转发” 按钮,点击配置主机到虚拟机的端口映射. ref: http:// ...
- Egret里用矢量挖圆形的洞
项目里需要用到,但是不是用在新手引导上,下面的代码可以绘制一个圆的四分之一,用四个即可拼出一个圆. private createShape(): egret.Shape { let magicNum ...
- ceph 的 bufferlist
bufferlist是buffer::list的别名,其由来在 http://bean-li.github.io/bufferlist-in-ceph/ 中有非常详细的介绍 其p.p_off.off字 ...