一个通用分页类

1、功能

  这个通用分页类实现的功能是输入页数(第几页)和每页的数目,就能获得相应的数据。

2、实现原理

  分页的实现通常分为两种,一种是先把数据全查询出来再分页,一种是需要多少查询多少,这里使用第二种,所以就需要先实现在dao层能够查询一定范围内的数据,这里就实现通过id作为键值,查询一定范围内的数据的功能

  dao层需要实现一个返回id在一个范围内的数据,那就在dao层的接口中添加一个这个方法:

    List<User> selectByRange(@Param("low") Integer low, @Param("high") Integer high);

  在mapper.xml中,添加相应的sql语句:

  <select id="selectByRange" resultMap="BaseResultMap">

    SELECT <include refid="Base_Column_List"/>
    FROM t_user
    WHERE id
    BETWEEN #{low,jdbcType=INTEGER}
    AND #{high,jdbcType=INTEGER}

  </select>

  然后在Service层的接口和类添加这样一个方法,这里实现了输入上下标返回一个User的List:

  public List<User> findByRange(int low, int high) {
    return userDao.selectByRange(Integer.valueOf(low), Integer.valueOf(high));
  }

  再然后是通用的分页类,这里的low和high,将在pagenumber当前页数或limit被修改时同时被修改:

public class pageEntity<T> {

    private List<T> list;           //对象记录结果集
    private int total;      // 总条数数
    private int limit;     // 每页显示条数
    private int pages;      // 总页数
    private int pageNumber; // 当前页
    private int low;        //需要获取数据的第一个id
    private int high;       //需要获取数据的最后一个id

    public int getLow() {
        return low;
    }

    public void setLow(int low) {
        this.low = low;
    }

    public int getHigh() {
        return high;
    }

    public void setHigh(int high) {
        this.high = high;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
        this.low = (this.pageNumber - 1) * this.limit;
        this.high = low + this.limit - 1;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public int getPageNumber() {
        return pageNumber;

    }

    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
        this.low = (this.pageNumber - 1) * this.limit;
        this.high = low + this.limit - 1;
    }

}

  然后是测试类,其实这个测试类我是准备命名为manager类的,这样dao层实现基本的数据库操作,service层实现针对实体类的基本操作,然后manager类中实现前端的需求,然后api类,也就是jersey中就只需要调用manager中的方法即可,不过我还得在想想这样是否合理。。。

  总之先这样写着吧,test中将添加这样的方法及实现:

    public pageEntity<User> Paging(pageEntity<User> pageEntity) {
        pageEntity.setList(userService.findByRange(pageEntity.getLow(),pageEntity.getHigh()));
        return pageEntity;
    }

  然后就是api类中调用了:

@Path("hello")
public class JerseyTest {

    @GET
    @Produces("text/plain")
    @Path("page")
    public String getString(@QueryParam("page") int page, @QueryParam("limit") int limit) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
        TestAPI test = (TestAPI) context.getBean("test");

        pageEntity<User> pageEntity = new pageEntity<User>();
        pageEntity.setLimit(limit);
        pageEntity.setPageNumber(page);
        pageEntity = test.Paging(pageEntity);
        StringBuilder stringBuilder = new StringBuilder();
        for (User user : pageEntity.getList()) {
            stringBuilder.append(" ");
            stringBuilder.append(user.getUsername());
        }
        return stringBuilder.toString();
    }
}

3、实现效果:

  先看看数据库的数据吧:

  

  然后是浏览器中使用时的状态:

  

  

  

4、总结

  这里我实现了一个pageEntity类,这个类使用了泛型所以也支持其他类,目前实现的功能能够传入当前页和每页的数目,得到相应的数据,前端应该还需要我们返回,总的数据量,总共有多少页等等的数据,不过这都是额外的操作了,实现也挺简单的。通过在dao层添加方法,用sql语句计算出来,再给赋值就好了。

5、源代码

  源代码可以从这里获取:https://github.com/xbtshady/spring_mybatis

原文地址:https://www.cnblogs.com/xxbbtt/p/8727422.html

时间: 2024-08-01 13:42:47

一个通用分页类的相关文章

PHP通用分页类

Page.class.php <?php/** * 分页类 * * 调用方式: * $p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]); * print_r($p->getPages()); //生成一个页码数组(键为页码,值为链接) * echo $p->showPages(1); //生成一个页码样式(可添加自定义样式) * */ /*总条数,需要显示的页数,当前页,每页显示的条数,连接生成一个一维数组,键为页码 值为连接返回一个生成好样式的页码(并且可以根

刚写的一个js分页类,未优化

以前也写过,很久以前了,写的很长,并且使用起来也不灵活.这次搞了个灵活版的. /* * SunPage --自定义分页类,仅获取分页的html代码,简单应用 * Sunbt 2015-5-4 * v1.0 * @param current_page int 当前页 * @param totle_page int 总页数 * @param take_num int 当前页左右携带页码数 * @param func_obj obj 分页实现函数 */ var SunPage = function(c

PHP通用分页(Pager)类

三种不同展示方式 附上style~ 1. 效果图1 2.效果图2  3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * * show(2) 1 ... 62 63 64 65 66 67 68 ... 150 * 分页样式 * #page{font:12px/16px arial} * #page span{float:left;margin:0px 3px;} * #page a{float:left;margin:0 3px;border:1px solid #d

通用分页后台显示

通用分页 目的:作用通用的分页查询方法 它主要实现的就是通用,将普通查询方法进行反射优化,转变成一个可以被所有实体类dao层所继承的通用查询方法. 实例一 普通分页: 首先我们写一个普通的分页方法,然后再将其进行反射优化,之后就可以看出通用分页的优势了, 1.连接(关闭数据库),使用的是mysql数据库 package com.yuan.util; import java.io.InputStream; import java.sql.Connection; import java.sql.Dr

C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)

[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需要,于是乎,就准备写一个Mysql_Helper在实现过程中,发现ADO.Net封装之完善,以及面向对象的封装.继承.多态,有了这些特性,何不把数据库操作封装成为一个通用的类呢,此文由此铺展而来... [实现功能] 这篇文章将要介绍的主要内容如下: 1.ADO.NET之SqlServer 2.ADO

Ci 自己的分页类【原创】

这里是自己手写的一个CI分页类的实现 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * * @package CodeIgniter * @author sunzhiyan 这是自己的一个工具类的测试,调用方法是 /** */ class CI_Mypage { /* * $pagenum 每页显示的数据 * $url 跳转的URL地址 * $rscount 数据总条数 * $pagi

C#操作SqlServer MySql Oracle通用帮助类

C#操作SqlServer MySql Oracle通用帮助类 [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需要,于是乎,就准备写一个Mysql_Helper在实现过程中,发现ADO.Net封装之完善,以及面向对象的封装.继承.多态,有了这些特性,何不把数据库操作封装成为一个通用的类呢,此文由此铺展而来... [实现功能] 这篇文章将要介绍的主

ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页

一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber

php下的一个分页类

这个分页类,参考了慕课网和燕十八的分页类. 慕课网分页类学习网址:http://www.imooc.com/learn/419 效果图: <?php class page{    public $cpage;            //传入的页码    public $totalnum;        //总的记录数,数据    public $total_page;        //总页数    public $per_page = 10;    //每页的记录数    public $sh