mybatis oracle分页查询sql语句(oracle查询分页)

java实现mysql分页查询1.前言1.mysql中分页用limit,但是limit后面不能跟表达式,错误表达式:limit(1-1)*10,10。2.对象中提供分页数据的方法。备注:limita,b表示从第a+1条开始取,本次一共取b条如limit0,10:取第1-10条数据,如limit25,8:去第26-33条数据。application.properties数据库Mysql配置#数据库配置spring.datasource.url=jdbc:mysql://loc

大家好,又见面了,我是你们的朋友全栈君。

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_time
        from 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);
    }

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129338.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTML空格符_HTML中什么表示特殊字符空格

    HTML空格符_HTML中什么表示特殊字符空格html+css代码在网页中如何插入打出空格字符实现方法摘要浏览器总是会截短HTML页面中的空格。HTML将所有空格字符,制表符,空格和回车符压缩为一个字符。如果要缩进段落,则不能简单地键入五个空格然后开始文本。如果您在文本中写10个空格,在显示该页面之前,浏览器会删除它们中的9个。如需在页面中增加空格的数量,您需要使用&nbsp;字符实体。本篇就单介绍…

    2022年10月4日
  • mysql数据库连接配置文件(db.properties)

    mysql数据库连接配置文件(db.properties)db.driver=com.mysql.jdbc.Driverdb.url=jdbc:mysql://localhost:3306/learn-test?useUnicode=true&characterEncoding=utf8db.username=rootdb.password=123456说明:如url使用的是本地数据库且端口是3306,可以省略lo…

    2022年6月2日
  • TLSF算法1:二级索引的计算

    TLSF算法1:二级索引的计算TLSF算法(一)分配中的位图计算一、什么是TLSF算法二,f的确定三、s的确定四、实验结果一、什么是TLSF算法在嵌入式系统中,内存需要在分配和释放时有一个确定的相应时间,才能进一步分析其实时任务的可调度性。因此TLSF算法是一个十分适用嵌入式领域的动态内存分配算法。在关于TLSf算法的经典文章中《TLSF:aNewDynamicMemoryAllocatorforReal-TimeSystems》详细介绍了TLSF算法相关知识。TLSF算法使用隔离匹配机制来实现良好匹配策略。基本的

    2022年6月17日
  • scipy读取不了imread_type object is not iterable

    scipy读取不了imread_type object is not iterable最近在运行代码的时候出现了这个错误——AttributeError:module’scipy.misc’hasnoattribute’imread’。查阅网上资料之后发现,大部分解决办法都是说没有安装PIL第三方库,库名现在为Pillow,推荐直接使用命令pipinstallPillow进行安装,但是我的问题并没有因此得到解决,还是继续报错AttributeError:modu…

    2022年10月14日
  • CUDA性能优化—-kernel调优(nvprof工具的使用)

    CUDA性能优化—-kernel调优(nvprof工具的使用)1、引言本文主要介绍并行分析,涉及掌握nvprof的几个metrics参数,所用的例子是CUDA性能优化—-线程配置一文中所提到的sumMatrix2D.cu例子。接下来本文会做一些列的试验,测试环境:TeslaM2070一块,CUDA6.0,操作系统:RedHat4.1.2-50,gccversion4.1.220080704首先回顾一下sumMatrix2D的kern…

    2022年6月11日
  • java 类加载路径_java动态创建类并加载到jvm

    java 类加载路径_java动态创建类并加载到jvm本文转载自http://blog.csdn.net/xyang81/article/details/7292380一、什么是ClassLoader?         大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在

    2022年8月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号