使用反射机制实现分页

反射实现分页 一套成功的反射代码分页,并付上使用的方法和页面的使用 立即下载
package readxls;

import java.lang.reflect.*;
import java.util.*;

public class PageControl {
private int curPage = 1;// 当前是第几页
private int maxPage = 1;// 一共有多少页

private int maxRowCount = 1;// 一共有多少行

private int rowsPerPage = 20;// 每页有多少行
private List dataList;// 装载每页的数据

private String turnPageContent = "";

private void countMaxPage() { // 根据总行数计算总页数

   if (this.maxRowCount % this.rowsPerPage == 0) {
    this.maxPage = this.maxRowCount / this.rowsPerPage;
   } else {
    this.maxPage = this.maxRowCount / this.rowsPerPage + 1;
   }
}

public static int getBeginIndex(int pageIndex,int maxRowCount,int rowsPerPage) { 
   int countPage = 0;
   if (maxRowCount % maxRowCount == 0) {
    countPage = maxRowCount / rowsPerPage;
   } else {
    countPage = maxRowCount / rowsPerPage + 1;
   }
  
   return countPage;
}

/**
* 多个函数使用分页,使用反射机制实现,测试完成
* 
* @param template
*            实现的逻辑类

* @param SetResultMethod
*            逻辑类中获取数据列表的方法名称

* @param SetAvailableCountMethod
*            逻辑类中获取数据列表总数的方法名称

* @param pgIndex
*            当前页码
* @param whereObject
*            查询条件
* @throws Exception
*/
public void loadDate(Object template, String SetResultMethod,
    Integer pgIndex, Object whereObject,Integer maxCount)
    throws Exception {
   try {

    /*
    * 多个函数使用分页,使用反射机制实现,待测试

    */

    Method resultMethod = template.getClass().getMethod(
      SetResultMethod,
      new Class[] { List.class, Integer.class, Integer.class }); 
    this.maxRowCount = maxCount.intValue();
    countMaxPage();
    curPage = pgIndex.intValue();
    if (curPage < 1) {
     curPage = 1;
    }
    if (curPage > maxPage) {
     curPage = maxPage;
    }

    int begin = (curPage - 1) * rowsPerPage;
    Object[] rinArgs = new Object[3];
    rinArgs[0] = whereObject;
    rinArgs[1] = new Integer(begin);
    rinArgs[2] = new Integer(rowsPerPage);

    dataList = (List) resultMethod.invoke(template, rinArgs);
   } catch (Exception e) {
    throw e;
   }
}

public void setDataList(List dataList) {
   this.dataList = dataList;
}

public void setDataList(List dataList, int maxRowCount, int pgIndex) {
   this.dataList = dataList;
   this.maxRowCount = maxRowCount;
   countMaxPage();
   curPage = pgIndex;
   if (curPage < 1) {
    curPage = 1;
   }
   if (curPage > maxPage) {
    curPage = maxPage;
   }
}

public List getDataList() {
   return dataList;
}

public void setRowsPerPage(int rowsPerPage) {
   this.rowsPerPage = rowsPerPage;
}

public int getMaxPage() {
   return this.maxPage;
}

public void setMaxRowCount(int maxRowCount) {
   this.maxRowCount = maxRowCount;
}

public int getMaxRowCount() {
   return this.maxRowCount;
}

public void setMaxRowCount(Object template,String SetAvailableCountMethod,Object whereObject){
   /*
   * 多个函数使用分页,使用反射机制实现

   */
   Object[] ainArgs = new Object[1];
   ainArgs[0] = (ArrayList) whereObject;  
   try {
    Method availableCountMethod = template.getClass().getMethod(
      SetAvailableCountMethod, new Class[] {List.class });
    maxRowCount =((Integer)availableCountMethod.invoke(template, ainArgs)).intValue();
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
}

public int getRowsPerPage() {
   return this.rowsPerPage;
}

public int getCurPage() {
   return curPage;
}

public void setCurPage(int curPage) {
   this.curPage = curPage;
}

public String getTurnPageContent() {
   if (getMaxPage() > 1) {
    turnPageContent = "每页" + getRowsPerPage() + "行 ";
    turnPageContent += "共" + getMaxRowCount() + "条记录 ";
    turnPageContent += "第" + getCurPage() + "页 ";
    turnPageContent += "共" + getMaxPage() + "页 ";
    if (getCurPage() == 1) {
     turnPageContent += "首页 上一页";
    } else {
     turnPageContent += "<A HREF=\"javascript:gotoPage(1)\">首页</A> ";
     turnPageContent += "<A HREF=\"javascript:gotoPage("
       + (getCurPage() - 1) + ")\">上一页</A>";
    }
    turnPageContent += " ";
    if (getCurPage() == getMaxPage()) {
     turnPageContent += "下一页 尾页";
    } else {
     turnPageContent += "<A HREF=\"javascript:gotoPage("
       + (getCurPage() + 1) + ")\">下一页</A> ";
     turnPageContent += "<A HREF=\"javascript:gotoPage("
       + getMaxPage() + ")\">尾页</A> ";
    }
    turnPageContent += "转到第<input type=\"text\" name=\"jumpPage\" value=\""
      + getCurPage()
      + "\" size=\"5\" onkeyup=\"if(/[^0-9]/g.test(this.value)){this.value=this.value.substr(0,this.value.length-1)}\">页";
    // turnPageContent += " <img src=\"images/go_1.gif\"
    // border=\"0\" style=\"cursor:hand\" onclick=\"Jumping()\"><input
    // type=\"button\" onclick=\"Jumping()\" value=\"跳转\"
    // class=\"button\">";
    turnPageContent += " <img src=\"images/go_1.gif\" border=\"0\" style=\"cursor:hand\" onclick=\"Jumping()\">";
   } else {
    turnPageContent = "共" + getMaxRowCount() + "条记录 ";
   }
   return this.turnPageContent;
}
}



2.使用分页方法的类


public class useMethod(){
      public String signFeedbackList() throws Exception{
           String pageIndex="1";
           if(request.getParameter("pageIndex")!=null 
            && ! request.getParameter("pageIndex").trim.equal("") ){
               pageIndex=request.getParameter("pageIndex").trim();
         }  
         PageControl pgControl=new PageControl();
         PubInfoDaoImp imp=new PubInfoDaoImp ();
         List whereList=new ArrayList();
          String info=request.getParameter("info");
         //加条件
         whereList.add("info_id='"+info+"'");
         pgControl.loadDate(imp,"","",new Integer(pageIndex),whereList);
         List dataList=pgControl.getDataList();
         request.setAttribute("pgControl",pgControl);

      }

}

3.PubInfoDaoImp 类

public class PubInfoDaoImp extends FoundDaoTemplate implements PubInfoDao { 
private static Logger logger = Logger.getLogger(PubInfoDaoImp.class);

// 查看信息根据分页
public List getSignInfoByCondition(List whereList, Integer pageIndex,
    Integer rowsPerPage) {
   String sql = "select * from f_zd_pubinfo where 1=1";
   List list = new ArrayList();
   if (whereList != null) {
    for (int i = 0; i < whereList.size(); i++) {
     sql = sql + " and " + (String) whereList.get(i);
    }
   }
   sql = sql + " order by PI_COMMUNITY,INFO_ID desc";
   sql = "select * from ( select a.*, rownum rnum from (" + sql
     + ") a where rownum <= ? ) where rnum > ?";
   FounderJdbcTemplate template = this.getJdbcTemplate();
   list = template.queryForList(sql, new Object[] {
     new Integer(pageIndex.intValue() + rowsPerPage.intValue()),
     pageIndex });
   return list;
}

// 查看总数
public int getMaxCount(List whereList) throws Exception {
   String sql_count = "select count(*) from f_zd_pubinfo where 1=1";
   if (whereList != null) {
    for (int i = 0; i < whereList.size(); i++) {
     sql_count = sql_count + " and " + (String) whereList.get(i);
    }
   }
   FounderJdbcTemplate template = this.getJdbcTemplate();
   int maxCount = 0;
   maxCount = template.queryForInt(sql_count);
   return maxCount;
}

4.在页面中
signList.jsp
<%
    PageControl pgControl=(PageControl)request.getAttribute("pgControl");
%>
加:<script type="text/javascript">
      function gotoPage(pageIndex){
        document.form1.action="xxx.action?pageIndex="+pageIndex;
        document.form1.submit();
     }
     function Jumping(){
       var pageIndex=document.form1.jumpPage.value;
       gotoPage(pageIndex);
       return;
     }
    </script>
在<body>中
<td><%=pgControl.getTurnPageContent()%></td>
 


分页组件+反射分页组件+反射分页组件+反射 分页组件+反射·企业级应用·非常强大!欢迎下载!! 立即下载

相关推荐

反射泛型完美版分页.rar

反射泛型完美版分页.rar

在C#中使用反射方式实现传参,参数为object,要转换参数时需要使用IEnumerable

项目场景: 我在写一个点胶机的胶线编辑器时,需要实现一个撤销重做的功能。 问题描述: ,在C#中使用反射方式实现传参,参数为object,要转换参数时需要使用IEnumerable,不然取不到想要的值。 参数委托端: //获取方法信息 执行反命令 MethodInfo methodInfo =info.Target.GetType().GetMethod(x.Value.UnName); ParameterInfo[] p = methodInfo.GetParameters(); if (p.C

尔雅慕客的博客 1707

使用反射分页,

使用反射分页,并自动封装成对象,最后返回一个对象集合

关于利用Java反射,进行数据分页、模糊查询、排序的方法封装尝试

1.工具类 import lombok.SneakyThrows; import org.apache.commons.lang.StringUtils; import java.lang.reflect.Field; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; /** * Created by fht on 2021/5/7 */ public class Da

沉心ss的博客 406

手把手教你用srec_cat生成带CRC校验的STM32固件(解决OTA常见校验失败问题)

本文针对STM32 OTA升级中常见的固件校验失败问题,提供了一套使用srec_cat工具自动生成带CRC32校验固件的实战解决方案。文章详细拆解了命令参数,指导开发者如何为固件嵌入CRC值、处理地址偏移及合并文件,从而确保Bootloader能可靠校验固件完整性,提升远程更新的稳定性。

kappa的博客 783

防火墙旁挂组网

分析拓扑结构,涉及路由器、交换机、防火墙。步骤包括基础 IP 配置、OSPF、防火墙双机热备、安全策略等。第一步,路由器配置。R5、R6 连接 ISP 和核心交换机,配置接口 IP,然后 OSPF。然后防火墙,双机热备的 HRP、VRRP,还有安全策略。接着交换机,划分 VLAN,配置 TRUNK,加入 OSPF。

weixin_73298423的博客 901

Java基于反射的内存分页排序

Java基于反射的内存分页排序序言应用场景程序源码 序言 提到分页,我想大部分开发者首先会想到数据库分页技术。是的,正常情况下分页排序我们都会交给数据库来做,毕竟这么做省时省力。凡是都有例外,当我们的业务逻辑或者查询数据无法通过一条sql完成时,这时我们就需要把所有的数据查询出来,在内存中进行排序分页。 应用场景 提到内存,我们就要知道如果数据量过大,本篇分享就不再适用。这里主要是针对成千上万条数据可以这么多,超出10万条以上,最好不要这么做,因为无论是执行效率还是内存CPU占用都是非常大的。 程序源码 因

Dreamer_By的专栏 496

实战指南 | 快速修复Adobe Acrobat 2020安装过程中的常见注册表错误

本文提供了Adobe Acrobat 2020安装过程中遇到“无法打开键”注册表错误的详细修复指南。通过安全编辑注册表,精准定位并删除残留键值,可快速解决此常见安装报错,确保软件顺利安装。同时,文章也介绍了其他安装问题的应对策略与预防措施。

weixin_29200485的博客 560

分页代码

 分页的方式:    页面分页    数据库分页(现在通用的分页方式):一次取数据的一部分,尽量采取数据库    机制来实现! 除了SQL 和 Access外 其他的数据库都提供了数据库分页机制,现在来用通用的分页方法来实现:游标分页! 本代码是基于java的反射机制实现! 首先:在数据库连接时给定参数,代码:Class.forName("sun.j

蜗牛 639

AXI backpressure反压机制代码

本文将xilinx的axi读写代码进行修改,实现吞吐量达到50%

m0_64636251的博客 1764

全面解读AI Infra:架构、生态与未来趋势

文章摘要 大模型时代下,AI基础设施(AI Infra)成为关键技术基建,涵盖从数据准备到模型服务的全栈技术体系。文章系统解构了AI Infra的四层架构(硬件资源层、资源管理调度层、开发框架层、平台工具层),并分析了全球AI Infra生态图谱,包括云计算巨头、芯片厂商等全栈服务商,以及中国特色的多元竞合格局。通过对比Data Infra与AI Infra的核心差异,指出AI Infra更关注智能应用的规模化与自动化。文章还探讨了从传统数据设施向AI基础设施的转型路径,强调自主可控、软硬协同等发展趋势,为

技术引领业务创新 608

分页控件 实战 Post篇

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34185364的博客 154

科研生产力革命:手把手教你打造基于大模型的Research Agent(文献调研+论文写作+思路激发)

本文介绍了如何利用Research Agent(科研智能体)提升科研效率。Research Agent能自主完成文献检索、信息整合和报告生成全流程,省去50%以上的基础工作时间。文章详细讲解了搭建运行环境的方法,包括工具准备和MetaGPT配置,并提供了两种实战方案:基础版Search-O1和专业版MetaGPT Research Agent。此外,还介绍了如何为垂直领域定制Agent,以及优化检索效果、改善报告逻辑等技巧。最后列举了学术研究、行业分析、内容创作和个人学习四大应用场景,帮助用户将AI从聊天工

LXY_LOVE36的博客 266

通用分页版本三

文章目录分页版本概念通用思路通用baseDao讲解效果图总结 分页版本 版本参考链接 分页一 https://blog.youkuaiyun.com/licmi/article/details/106441305 分页二 https://blog.youkuaiyun.com/licmi/article/details/106461125 概念 将上一次查询请求再发一次,只不过页码变了 通用思路 相信大家跟我一样,刚开始了解通用分页时不懂,不知道哪里通用了,还是感觉代码很多。 我举个例子,假如我有4张表需要实现

licmi的博客 245

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7959

OpenMM | PDBFixer 用于蛋白质预处理

PDBFixer 用于蛋白质预处理

DrugOne 3005

jsp通用分页展示分页

通用分页1通用分页核心思路所需环境编码 通用分页核心思路 核心思路: 将上一次的查询请求再发一次,只不过是页码发生了改变! 所需环境 编码 jar包: 这里用的mysql数据库,所以导入了第二个jar包 Util包中的类: 其中Encoding类是处理中文乱码,config是用来连接mysql数据库,还有pageBean工具类,pageBean中写了分页页码,页大小,总记录数的属性方法 DBHelper: package com.shegx.util; import java.io.InputStr

chiyangj的博客 382

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

通用分页(一)

通用分页 什么是通用分页: 是自己封装一个工具类,在不同类型的数据需要分页时直接调用,更改里面的sql语句即可 分页的三要素 page 页码 视图层传递过来 rows 页大小 视图层传递过来 total 总记录数 后台查出来 控制 page 页码代码 /** * 获得起始记录的下标 * * @return ...

wx1762813417的博客 245

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Web用户控件开发--分页控件

分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一些可以分页的数据控件,但其分页功能并不尽如人意。本文对于这些数据控件的假分页暂且不表,如有不明白的同学请百Google度之。 本文中实现的分页控件是在手动分页基础上做的改善,将分页实现的逻辑部分和数据控件的绑定尽可能分开,以克服手工编写分页代码任务繁琐、代码重用率低等问题。 本文依旧是一粒粟子。 一、分页控件素颜 ...

weixin_34311757的博客 152

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mysql 通用分页_通用分页(一)

packagecom.GeneralPaging.util;importjava.awt.print.Pageable;importjava.lang.reflect.Field;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayLis...

weixin_34451330的博客 235

springCloud+Vue改造品优购第二章--------品牌管理分页功能后端完成

分页+条件查询的实现方式大概有两类 - 封装成对象的方式 - 封装成Map的形式 这里采取封装成map传参的实现 具体代码如下 TbBrandMapper.xml &lt;select id="getPage" resultType="java.util.Map"&gt; select a.* from tb_brand a where 1 = 1...

weiqiang2的博客 595

SSH公共action集成easyui分页+模型驱动

package com.kayo.bos.web.action;import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map;import org.springframework.data.domain.Page;imp

AsakuraNatsuhi的博客 360

Mybatis 札记(三、分页、注解开发)麻雀虽小,五脏俱全

一:分页 思考:为什么需要分页? 原因:减少数据的处理量 方式一:使用Limit分页 语法: select * from user limit startIndex , pageSize ; 使用MyBatis实现分页,核心SQL 1、接口 2、Mapper.xml 3、测试 方式二:使用RowBounds分页 (了解即可) sql照常查询全部, 只是在测试代码中需传入rowBounds的对象 方式三:使用 PageHelper (了解即可) 官网:https://pagehelper.gith

CSNZのBlog 211

spring-data-jpa实现vo类的动态添加查询

最近开始使用spring-data-jpa,它对于实体类的基本查询非常方便,vo查询还是需要写sql,动态条件的查询则需要继承JpaSpecificationExecutor<T>来实现,网上例子非常多。这里找到一个封装不错的例子,配置查询条件的注解就可以使用动态条件的查询,原文地址:https://blog.youkuaiyun.com/a184838158/article/details/82...

99150的博客 4733

Hibernate 多表查询分页核心代码

java 代码 /**      * 多表分页,然后影射成JAVABEAN     * @param sqlcount  HSQL计算多表查询的总数     * @param sqllist  HSQL多表查询的语句     * @return  List     * @throws InvocationTargetExceptio...

sydxide2006 332
上一篇: aop和ioc的区别
下一篇: JAVA反射机制详解
wankaiming
博客等级 码龄15年 49粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值