在这些控件里要达到分页的效果,一般都会传2个参数,第一个是表示当前页的索 引(一般从0开始),第二个表示当前页展示多少条业务记录,然后将相应的参数传递给List getList(PagenateArgs args)方法,最终实现数据库中的分页时候可以使用limit关键词(针对mysql)进行分页,如果是oracle或者sql server他们都有自带的rownum函数可以使用。

针对上述思路,首先在 demo.mybatis.model下面新建一个名为PagenateArgs的分页参数实体类与一个名为SortDirectionEnum的枚举 类,里面包含当前页面索引pageIndex, 当前页展示业务记录数pageSize, pageStart属性表示从第几条开始,(pageStart=pageIndex*pageSize)因为limit关键词用法是表示【limit 起始条数(不包含),取几条】,orderFieldStr排序字段,orderDirectionStr 排序方向,所以具体创建如下:

package david.mybatis.model;/* * 分页参数实体类 */public class PagenateArgs {    private int pageIndex;    private int pageSize;    private int pageStart;    private String orderFieldStr;    private String orderDirectionStr;    public PagenateArgs() {        // TODO Auto-generated constructor stub    }    public PagenateArgs(int pageIndex, int pageSize, String orderFieldStr, String orderDirectionStr) {        this.pageIndex = pageIndex;        this.pageSize = pageSize;        this.orderFieldStr = orderFieldStr;        this.orderDirectionStr = orderDirectionStr;        pageStart = pageIndex * pageSize;    }    public int getPageIndex() {        return pageIndex;    }    public int getPageStart() {        return pageStart;    }    public int getPageSize() {        return pageSize;    }    public String orderFieldStr() {        return orderFieldStr;    }    public String getOrderDirectionStr() {        return orderDirectionStr;    }}

package david.mybatis.model;/* * 排序枚举 */public enum SortDirectionEnum {    /*     * 升序     */    ASC,        /*     * 降序     */    DESC}

完成上面的步骤以后在IVisitorOperation接口类中继续添加一个方法public List getListByPagenate(PagenateArgs args),这次的分页其实也就是在这个的基础上稍加改动即可,IVisitorOperation接口类 改动后如下所示:

package david.mybatis.demo;import java.util.List;import david.mybatis.model.PagenateArgs;import david.mybatis.model.Visitor;import david.mybatis.model.VisitorWithRn;public interface IVisitorOperation {    /*     * 基础查询     */    public Visitor basicQuery(int id);    /*     * 添加访问者     */    public int add(Visitor visitor);        /*     * 删除访问者     */    public int delete(int id);        /*     * 更新访问者     */    public int update(Visitor visitor);        /*     * 查询访问者     */    public Visitor query(int id);        /*     * 查询List     */    public List getList();        /*     * 分页查询List     */    public List getListByPagenate(PagenateArgs args);    }

接下来改动VisitorMapper.xml配置文件了,新增一个节点id与参数类型参照前几章的方式配置好,如下此处新增的id就为getListByPagenate,配置好以后如下

<?xml  version="1.0" encoding="UTF-8"?>mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">                insert into Visitor (Name, Email, Status, CreateTime)        values (#{name}, #{email}, #{status}, #{createTime})                delete from Visitor where        status>0 and id = #{id}                update Visitor set Name =        #{name}, Email=#{email}, Status=#{status} where id=#{id} and Status>0;                select Id,        Name, Email, Status, CreateTime from visitor where id=#{id} and        Status>0 order by Id                select *        from visitor where id=#{id} and        Status>0 order by Id                                select * from Visitor where        status>0                                                                    select * from (                 ) t         -1 and pageSize>-1">            limit #{pageStart}, #{pageSize}                        order by ${orderFieldStr} ${orderDirectionStr}

这里面的字段属性都是针对PagenateArgs参数类中的属性名,保持一致。

-1 and pageSize>-1">    limit #{pageStart}, #{pageSize}

在DemoRun类中创建测试方法:

/* * 分页参数 */public static void queryVisitorListWithPagenate(int pageIndex, int pageSize, String orderField, String orderDire) {    PagenateArgs args = new PagenateArgs(pageIndex, pageSize, orderField, orderDire);    SqlSession session = MybatisUtils.getSqlSession();    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);    List visitors = vOperation.getListByPagenate(args);    for (Visitor visitor : visitors) {        System.out.println(visitor);    }    MybatisUtils.closeSession(session);    MybatisUtils.showMessages(CRUD_Enum.List, visitors.size());}

DemoRun.queryVisitorListWithPagenate(0, 100, "id", SortDirectionEnum.DESC.toString());

运行后下测试结果,先按Id倒序排列,查的Visitor表一共有14条记录,

假设取在第2页取5条,执行下面也就是6-10条数据,这样传参数就行了

DemoRun.queryVisitorListWithPagenate(1, 5, "id", SortDirectionEnum.DESC.toString());

结果如下:

实现了一个分页逻辑.

mybatis mysql rownum_MyBatis怎样实现MySQL动态分页?相关推荐

  1. Mybatis+MySQL动态分页查询数据经典案例

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

  2. Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

  3. Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)

    package cn.bdqn.mhouse.dao;import java.util.List;import cn.bdqn.mhouse.entity.House; import cn.bdqn. ...

  4. jpa mysql sql分页查询语句_JPA多条件复杂SQL动态分页查询功能

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

  5. 基于SpringDataJpa的mysql动态分页多表查询

    基于SpringDataJpa的mysql动态分页多表查询 由于这篇文章预计篇幅会很长,关于Spring Data JPA的知识就简短的分享,更多的请自行度娘,JPA 封装了很多查询的接口,但今天要讲 ...

  6. python mysql 分页_利用python对mysql表做全局模糊搜索并分页实例

    在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql.前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件. "&quo ...

  7. 基于Java+MySQL 实现(Web)动态人脸识别的认证识别系统【100010315】

    摘 要 在人脸识别领域,主要涉及到两项技术,一项为人脸检测技术,另一项为人脸识别技术.其中,人脸检测技术主要解决存不存在人脸的问题,而人脸识别技术主要解决此人是谁的问题.除此以外,还有人脸对齐.人脸关 ...

  8. 【MySQL Tips】偏移量大的分页查询LIMIT子句的优化方法

    SQL优化是要看执行计划分析,并做基准测试的. 前言 MySQL官方关于LIMIT子句的优化建议在之前的文章中写过,链接如下: 8.2.19 LIMIT查询优化.note [MySQL 8翻译]8.2 ...

  9. Oracle与Mysql主键、索引及分页的区别小结

    Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id. ...

最新文章

  1. 【Python】Pyecharts 组合图形绘制实践
  2. SQL查询数据库完整表结构(mysql)
  3. java判断读到末尾_Flink实战:自定义KafkaDeserializationSchema(Java/Scala)
  4. 下 终端_Linux/UNIX 下终端复用利器 tmux
  5. WPF 中出现不同线程间操作的解决
  6. Java集合框架——概述
  7. 集群启动/停止方式总结
  8. 归并排序验证性实验_性能优化技巧:有序归并
  9. linux下mail函数,Linux主机禁用Mail函数的解决办法
  10. leetcode 730 Count Different Palindromic Subsequences
  11. SiTime 硅晶振抖动定义和测量方法
  12. 读书笔记之财报就像一本故事书
  13. 虚拟主机和云服务器有什么区别,我们应该如何选择?
  14. 用动画做出一个正方体并且3d旋转,详解
  15. win11电脑中文用户名修改成英文用户名
  16. 宁做创业狼,不做打工狗
  17. BUUCTF·[AFCTF2018]Vigenère·WP
  18. 期货反手有几种做(期货里面什么叫反手)
  19. VC字符串与时间戳相互转换
  20. 基于htk工具包的语音识别

热门文章

  1. TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速
  2. 测试keras和mxnet的速度
  3. Qt/PyQt中使用系统全局的快捷键
  4. setting an array element with a sequence
  5. 总结Hbase 与 MongoDB
  6. matlab循环矩阵
  7. OpenCV图像去噪
  8. ijkplayer支持h264
  9. 一.MongoDB简介
  10. pe卸载win10更新补丁_Win10更新翻车!CPU使用率飙升,直接损坏SSD,勿升级