java实现mysql分页查询

1.前言

1.mysql中分页用limit,但是limit后面不能跟表达式 ,错误表达式:limit (1-1)*10,10。
2.对象中提供分页数据的方法。
备注:limit a,b
表示从第a+1条开始取,本次一共取b条 如limit 0,10:取第1-10条数据,如 limit 25,8:去第26-33条数据。

application.properties数据库Mysql配置

#数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/xxxxxx?serverTimezone=UTC
spring.datasource.username= xxxx
spring.datasource.password= xxxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#mybatis的mapper书写路径
mybatis.mapper-locations=classpath:mapper/*/*.xml

pom依赖

     <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

2.java分页对象类

分页对象: 主要看pageNo 、pageSize 、startNum,这里给页码和条数附初始值。有@Data在可以自动实现set和get

import lombok.Data;
import java.util.Date;@Data
public class BaseModel {/*** 上游系统唯一系统标识号 12位系统号**/private String upSystemId;/*** 上游系统唯一流水号 21位**/private String upSystemSeqNo;/*** 上游系统 请求日期 2020-10-20**/private Date tranDate;/*** 上游系统 操作人 12位**/private String userId;/*** 主键ID**/private String id;/*** 创建时间**/private Date createTime;/*** 更新时间**/private Date updateTime;/*** 当前页,需要查询的页数* pageNo从1开始*/private int pageNo = 0;/*** 每页显示的条数*/private int pageSize = 10;/*** 当前页,需要查询的页数* pageNo从1开始*/private int startNum;/*** 设置分页查询数据*/public void setPageQuery() {this.startNum = this.getPageNo() > 0 ? (this.getPageNo() - 1) * this.getPageSize() : 0;}

在调用sql前,设置分页数据:model.setPageQuery();
备注:该对象继承了BaseModel ,所以子类可以直接调用父类的方法。

 @BaseBeforeAnnotation@RequestMapping("selectReaderCardList")public BaseResponse selectReaderCardList(@RequestBody ReaderCardInfoModel model) {model.setPageQuery();List<ReaderCardInfoModel> bookInfoModel = readerCardInfoService.selectReaderCardList(model);return new BaseResponse(ResultEnum.SUCCESS,bookInfoModel);}

3. Mybatis–Mapping.xml

mapping.xml中的分页查询sql:
主要看这段,pageNo>0表示是分页查询,不是全量查询。
startNum表示从第startNum+1条数据开始取数据,startNum在setPageQuery()方法中赋值了。
pageSize表示取多少条数据。

<if test="pageNo > 0">limit #{startNum}, #{pageSize}
</if>
    <select id="selectReaderCardList" parameterType="com.example.demo.executer.readerCardInfo.model.ReaderCardInfoModel"resultMap="BaseResultMap">select id,reader_id,usable_flag,card_amt,bind_date,remark,create_time,update_timefrom t_reader_card<where><if test="usableFlag != null">and usable_flag = #{usableFlag}</if><if test="bindDate != null">and bind_date = #{bindDate}</if><if test="readerId != null">and reader_id = #{readerId}</if></where>order by create_time desc<if test="pageNo > 0">limit #{startNum}, #{pageSize}</if></select>

4.请求与执行结果

postman请求参数
查询第3页的4条数据,limit 8,4

管理台日志打印
后台在接收到请求时,生成ReaderCardInfoController对象时,会自动生成

 : ----------------------------------------------------------------------------------------------------start: ------BaseBeforeAspect---获取到请求参数------: ---入口方法:com.example.demo.executer.readerCardInfo.controller.ReaderCardInfoController: ---请求方法:selectReaderCardList: ---请求参数:{"pageNo":3,"pageSize":4,"startNum":0,"usableFlag":"0"}: ==>  Preparing: select id, reader_id, usable_flag, card_amt, bind_date, remark, create_time, update_time from t_reader_card WHERE usable_flag = ? order by create_time desc limit ?, ?: ==> Parameters: 0(String), 8(Integer), 4(Integer): <==      Total: 4: ---commonAfter返回参数:{"code":"000000","data":[{"createTime":1603295662000,"id":"202010211554221000048","pageNo":0,"pageSize":10,"remark":"新建卡","startNum":0,"updateTime":1603295662000},{"createTime":1603295662000,"id":"202010211554221000049","pageNo":0,"pageSize":10,"remark":"新建卡","startNum":0,"updateTime":1603295662000},{"createTime":1603295661000,"id":"202010211554211000045","pageNo":0,"pageSize":10,"remark":"新建卡","startNum":0,"updateTime":1603295661000},{"createTime":1603295661000,"id":"202010211554211000046","pageNo":0,"pageSize":10,"remark":"新建卡","startNum":0,"updateTime":1603295661000}],"msg":"交易成功"}: ----------------------------------------------------------------------------------------------------end"}
: ----------------------------------------------------------------------------------------------------end

扩展

有个想法,不想再方法中调用model.setPageQuery(),想自动完成这个步骤。
分页对象写成以下两种,并在调用处去掉model.setPageQuery();

    /*** 当前页,需要查询的页数* pageNo从1开始*/private int startNum = this.getPageNo() > 0 ? (this.getPageNo() - 1) * this.getPageSize() : 0;
//    private int startNum = 0;
    /*** 设置分页查询数据*/public void setPageQuery() {this.startNum = this.getPageNo() > 0 ? (this.getPageNo() - 1) * this.getPageSize() : 0;}public BaseModel(){setPageQuery();}
 @BaseBeforeAnnotation@RequestMapping("selectReaderCardList")public BaseResponse selectReaderCardList(@RequestBody ReaderCardInfoModel model) {// model.setPageQuery();List<ReaderCardInfoModel> bookInfoModel = readerCardInfoService.selectReaderCardList(model);return new BaseResponse(ResultEnum.SUCCESS,bookInfoModel);}

结果是:不得行。嘿嘿,暂时未想到好的方法。

此分页方法是自己结合公司项目写的,有不足的地方欢迎大家指正。

Mybatis实现mysql分页查询相关推荐

  1. mysql分页查询报错,及解决

    mysql分页查询报错: 前提: 1.每页1000条数据 2.查到57页的时候,就报错了 以下是错误信息: org.springframework.jdbc.UncategorizedSQLExcep ...

  2. Mybatis最入门---分页查询(逻辑分页与SQL语句分页)

    [一步是咫尺,一步即天涯] 到目前为止,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层.但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的.本文,我们将从逻辑分页, ...

  3. MySQL分页查询方法及优化

    MySQL分页查询方法及优化 http://uusama.com/458.html

  4. 零基础带你学习MySQL—分页查询(十八)

    零基础带你学习MySQL-分页查询(十八)

  5. mysql中如何分页查询_MySQL_mysql分页原理和高效率的mysql分页查询语句,以前我在mysql中分页都是用的 l - phpStudy...

    mysql分页原理和高效率的mysql分页查询语句 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我 ...

  6. java的mysql分页查询语句怎么写_java的mysql连库 增删改查语句、分页查询语句大全...

    //代码复制出来,修改一下bean,加载一下jar包,能直接用的,不懂加我Q 983331283 package cn.tootoo.entity; public class Page { priva ...

  7. MySQL分页查询商品订单列表

    MySQL分页查询商品订单列表 题目 简单表设计并且写出sql语句,购物订单系统里面"所有订单"功能,一个订单包含多个产品,一个产品也可能被不同的订单包含,请写出针对于产品名称搜索 ...

  8. java mysql 分页查询_MySQL分页查询方法及优化

    当数据库的数据量很大时,一次性查询结果就会变得很慢,为了提高查询效率,我们可以使用MySQL的分页查询功能.本文就为大家带来MySQL分页查询方法及优化. 推荐阅读: 分页查询方法: 在MySQL中, ...

  9. Mybatis Plus实现分页查询

    导入maven依赖 <!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId>&l ...

  10. oracle sql 全是子查询查询速度太慢如何优化_如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!...

    在我们日常开发中,分页查询是必不可少的,可以说每干后端程序猿大部分时间都是CURD,所以分页的查询也接触的不少,你们都是怎么实现的呢?前不久的一段时间,我的一个同事突然找我寻求帮助,他说他写的sql查 ...

最新文章

  1. 点滴积累【C#】---初始页面自动给站点名称赋值
  2. 用ssh建立机器之间的信任机制
  3. mybatis源码分析(2)——事务概述
  4. /bin/sh^M:损坏的解释器: No such file or directory
  5. 【转】Android Studio简单设置
  6. 类加载器-启动类加载器
  7. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...
  8. 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)
  9. samba服务器新建文件权限,Ubuntu中安装samba服务器创建文件共享的方法及普通用户设置共享的问题解析...
  10. 如何创建 SVN 服务器,并搭建自己的 SVN 仓库
  11. RTSP客户端接收存储数据(live555库中的openRTSP实例)
  12. mysql 把一列转多行_Oralce 按分隔符把一列转成多行
  13. recyclervie刷新到底部_自定义RecyclerView添加HeaderView,添加FooterView,实现滑动到底部,加载更多...
  14. 教你一行代码解决 Git报错 fatal refusing to merge unrelated histories
  15. 1个app的完整测试用例_同你分享1个完整的聚类分析案例
  16. 出现画面抖动_手机拍照时模糊,抖动?赶紧来拯救你的拍摄技术吧!
  17. Elasticell-聊聊Raft的优化
  18. EXCEL的VLOOKUP与COLUMN函数结合完成工资条实例
  19. swiper设置autoplay不起作用
  20. 袋鼠云研发手记 | 袋鼠云EasyManager的TypeScript重构纪要...

热门文章

  1. c语言的快速排序,C语言实现快速排序法(分治法)
  2. 论文解读:MOEA/D-TPN
  3. Degree and Closeness Centrality
  4. Java Web Spring框架学习(一)
  5. Oracle+ogg-00664,OGG采用NET8方式读取ASM中日志报OGG-00664(ORA-12162),配置如下:
  6. javaScript、PHP连接外卖小票机打印机方案(佳博、芯烨等)
  7. IplImage结构体
  8. 浅谈vocaloid3基础操作
  9. 乐谱xml文件转为VOCALOID3的输入文件格式vsqx
  10. Eplan执行翻译操作详细教程