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 的分页方法. 按照上面的方法设置后,确 ...
随机推荐
- ELK菜鸟手记 (一) 环境配置+log4j日志记录
1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一个关键字查询日志中某个关键信息相当困 ...
- webpack中file-loader和url-loader的关系
url-loader把资源文件转换为URL,file-loader也是一样的功能. 不同之处在于url-loader更加灵活,它可以把小文件转换为base64格式的URL,从而减少网络请求次数.url ...
- chrome浏览器的跨域设置 Google Chrome浏览器下开启禁用缓存和js跨域限制--disable-web-security
chrome用户默认路径 Win7:C:\Users\[用户名]\AppData\Local\Google\Chrome\User Data\XP:C:\Documents and Settings\ ...
- keras 文本分类 LSTM
首先,对需要导入的库进行导入,读入数据后,用jieba来进行中文分词 # encoding: utf-8 #载入接下来分析用的库 import pandas as pd import numpy as ...
- Xilinx 常用模块汇总(verilog)【04】
作者:桂. 时间:2018-05-15 13:07:02 链接:http://www.cnblogs.com/xingshansi/p/9040472.html 前言 Xilinx 常用模块汇总(v ...
- 拯救安卓手机的数据(无法进入系统只能打开recovery)
这里不得不赞一个谷歌的开放,如果不是这样读取数据就很糟糕了,记得一千带着我的mac本子到苹果店,那个所谓的“天才”就说苹果的数据无法读取,我了个艹,为了避免丢失你必须得准备一个TM.好了废话不多说,进 ...
- 【经验分享】我经历的几门MOOC
这半年来,从1月初到6月底,在coursera上注册了4们有关数据分析/挖掘的课程.这些课程都是利用业余时间学习,每周基本上花5个小时左右.其中通过了3门,注销了一门.感觉还是学到了一些东西. 第一门 ...
- IOS 简单的 加减分 动画
使用 shapeLayer 当动画层 其实以前有写过 类似的了 github: https://github.com/li6185377/AddScore self.pregress = [[CAS ...
- 【iCore1S 双核心板_ARM】例程五:IWDG看门狗实验——复位ARM
实验原理: STM32内部包含独立看门狗,通过看门狗可以监控程序运行,程序错误 时,未在规定时间喂狗,自动复位ARM.本实验通过按键按下,停止喂狗, 制造程序运行 错误,从而产生复位 . 实验现象: ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-13 emWin底层驱动接口介绍
视频简介:该视频介绍emWin底层驱动接口. 源视频包下载地址:链接:http://pan.baidu.com/s/1nvPpC2d 密码:cbb7 银杏科技优酷视频发布区:http://i.youk ...