- 浏览: 119531 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (135)
- java (135)
- [转]c# 画圆角矩形 (1)
- 设计模式生活实例 (1)
- .nET2.0小技巧 (1)
- 从另一个角度看敏捷实践(一)--IPM:承诺的仪式 (1)
- javascript字符串转json对象 (1)
- 使用BeanUtils时,Date类型值为空的解决方法 (1)
- Lenovo V460+Ubuntu 11.10 无线网问题 (1)
- Lucene 索引和搜索过程核心类详解 (1)
- Android短信编解码方式 (1)
- 股神巴菲特十大致富秘籍 (1)
- Map遍历的三种方法 (1)
- Android中用Toast.cancel()方法优化toast内容的显示 (1)
- ViewFlipper “Receiver not registered” Error (1)
- javax.xml.transform.TransformerFactoryConfigurationError (1)
- JNI调用的注意事项 (1)
- JUnit单元测试感悟 (1)
- 用C#写定时关机的程序 (1)
- ASP.NET开发工具Web Matrix介绍 (1)
- MapXtreme2004代码 MapControl控件中显示地图文件 (1)
- 《使用 Microsoft .NET 的企业解决方案模式》读书笔记3 (1)
- 微创短信开发平台 (1)
- 谈谈Q+平台的技术实现 (1)
- 手机防盗软件实现(源码) (1)
- 虚析构函数(总结 帖子) (1)
- c语言中去除const修饰 (1)
- ORA-01012: not logged on 解决办法 (1)
- paypal提现如何省钱 (1)
- 数独suduku (1)
- MyISAM InnoDB 区别 (1)
- 随 笔 (1)
- Android上的log,日志相关 (1)
- 百度质量部实习居然通过了~ (1)
最新评论
-
野狐禅:
ext.get('imagebrowse') is null
ExtJs上传图片预览功能 -
zhuyl_wind:
不切实际,呵呵
[]5年内买车买房-理财篇 -
in南京:
关键你那两千块钱就够交一个多月的房租!换个城市你那六百也远远不 ...
[]5年内买车买房-理财篇 -
javac_xinyun:
呵呵,看完了,确实不错,貌似第一年的房租每月算进去 ,人际关系 ...
[]5年内买车买房-理财篇 -
dishikun:
貌似很不错,就是没把房租算进去!
[]5年内买车买房-理财篇
在日常的编程过程中,经常要处理数据集合。对数据集合处理一般采用下面的接口:
/** * 得到集合方法,传入当前页,和每页的大小 * * @param curpage * @param pagesize * @return */ public list<t> getlist(int curpage, int pagesize)
上面的处理过程,即大家通常所说的分页;一般显示的时候,使用上面的方法就可以了,但是,如果要对集合中的全部数据处理呢?一般情况下,会出现下面的代码:
int curpage = 1; int pagesize = 100; int count = xxxservice.getxxxcount(); int lastpage = count / pagesize + 1; while (lastpage >= curpage) { list<xxxtype> lists = xxxxservice.getxxxxbyyyy(curpage,pagesize); if (lists == null) { break; } for (t obj : lists) { //对其中的一个进行处理 } curpage++; }
那么,能不能把上面的代码变成一个通用的模式(工具),然后很简单的使用,不用每次都这样的重复呢?
让我们分析一下,上面情况下,什么是可变的,什么是不变的?
1、总体的流程是不变的;
2、得到当前页的list和对其中一个进行处理是可变的
分析到这里,可能很多人想到了模板方法类解决这个问题,在spring jdbc中大量使用了这种方法;具体实现时,有2种选择,一个是使用抽象来完成过程1,使用子类来完成过程2,典型如:jdk中inputstream,第二个,使用接口来完成过程2,使用类来完成过程1,如:thread和runable;
下面采用第二种方式来实现;首先定义接口:
public interface listaction<t> { /** * 得到集合方法 * * @param curpage * @param pagesize * @return * @throws exception */ public list<t> getlist(int curpage, int pagesize) throws exception; /** * 处理一个对象 * * @param t * @throws exception */ public void process(t t) throws exception;}
这个接口中,是分析中可变的部分。再来定义不可变的类:
public class overlistutil<t> { private int curpage = 1; private int pagesize = 100; private int lastpage = 1; public void overlist(int count, listaction<t> listation) throws exception { lastpage = count / pagesize + 1; while (lastpage >= curpage) { list<t> lists = listation.getlist(curpage, pagesize); for (t obj : lists) { listation.process(obj); } curpage++; } } /** * 得到当前处理的页 * * @return */ public int getcurpage() { return curpage; } public void setcurpage(int curpage) { this.curpage = curpage; } public int getpagesize() { return pagesize; } /** * 是否是最后一页 * * @return */ public boolean islastpage() { return curpage == lastpage; } /** * 设置每页要处理的数量,默认100 * * @param pagesize */ public void setpagesize(int pagesize) { this.pagesize = pagesize; }}
这个类主要对不可变的部分进行抽象,即模板。
那么,怎么使用呢?和thread、runable的实现一样,下面是个例子:
final int count = 5; final overlistutil<string> olu = new overlistutil<string>(); olu.setpagesize(10); olu.overlist(count, new listaction<string>() { @override public void process(string t) throws exception { // 这里是主要处理逻辑 system.out.println("正在处理第" + olu.getcurpage() + "页"); system.out.println("names:" + t); } @override public list<string> getlist(int curpage, int pagesize) throws exception { // 这里一般情况下只需要简单的调用服务即可 list<string> names = getservicenames(curpage, pagesize); return names; } // 下面这个模仿一个服务 private list<string> getservicenames(int curpage, int pagesize) { list<string> names = new arraylist<string>(); int lenght = 1; if (olu.islastpage()) { lenght = count - ((olu.getcurpage() - 1) * olu.getpagesize()); } else { lenght = olu.getpagesize(); } for (int i = 0; i < lenght; i++) { string s = string.valueof(math.random() * 100); names.add(s); } return names; } });
那么为什么不把overlistutil的overlist 定义为static的呢?因为这里使用了泛型,参见泛型
呵呵,周五了,明天可以好好的玩玩了!祝大家周末愉快!
发表评论
-
百度质量部实习居然通过了~
2012-02-08 12:23 992[size=small;]? ? ?本来打算在软工所苦 ... -
Android上的log,日志相关
2012-02-07 14:18 1535摘自:http://blog.csdn.net/met ... -
随 笔
2012-02-04 13:39 600金风玉露一相逢,便胜却人间无数。英文版: chemis ... -
MyISAM InnoDB 区别
2012-02-02 16:59 737<h1 id="artibody ... -
数独suduku
2012-01-31 14:38 916sudu sudu sudu sudu sudu su ... -
paypal提现如何省钱
2011-12-28 16:58 1224据PayPal中文注册得知,如今很多收样品费的外贸商户 ... -
ORA-01012: not logged on 解决办法
2011-12-28 13:08 3512<span style="font-f ... -
c语言中去除const修饰
2011-12-21 10:54 1435[size=16px;]<span style= ... -
虚析构函数(总结 帖子)
2011-12-21 09:54 706<span style="" ... -
手机防盗软件实现(源码)
2011-12-20 12:54 938<a href="http://blo ... -
谈谈Q+平台的技术实现
2011-12-20 09:49 963这篇文章是我个人 ... -
微创短信开发平台
2011-12-19 11:39 772在网上闲逛,发现了一个站点,微创短信开发平台(http ... -
《使用 Microsoft .NET 的企业解决方案模式》读书笔记3
2011-12-19 10:24 783第3章 Web表示模式 没有一个设计策略能够适合所有情 ... -
MapXtreme2004代码 MapControl控件中显示地图文件
2011-12-15 14:29 912::<?xml:namespace prefix ... -
ASP.NET开发工具Web Matrix介绍
2011-12-15 13:39 970<p class="MsoPlain ... -
用C#写定时关机的程序
2011-12-15 11:14 705</span></font>& ... -
JUnit单元测试感悟
2011-12-14 11:29 864<p class="MsoNorma ... -
JNI调用的注意事项
2011-12-14 09:34 755JNI的简单教程网上很多,看看就能够明白,照着操作也基 ... -
javax.xml.transform.TransformerFactoryConfigurationError
2011-12-13 13:34 854<span style="" ... -
ViewFlipper “Receiver not registered” Error
2011-12-12 10:59 1127偶尔出现这个错误: <span> < ...
相关推荐
在Android应用开发中,分页加载是一种常见的优化用户体验的技术,特别是在数据量庞大的列表或网格视图中。Java语言是Android开发的主要编程语言,因此理解如何使用Java实现Android分页至关重要。本节将深入探讨...
3. **JDBC操作**:在Java中,我们可以使用JDBC API来执行分页SQL查询。首先,构造SQL语句,然后通过`PreparedStatement`设置参数,最后调用`executeQuery()`方法获取结果集。 4. **ORM框架**:如果使用ORM框架如...
在Java编程中,分页操作是一项非常常见的任务,特别是在处理大量数据时,为了提高用户体验,我们需要将数据分批次展示,而不是一次性加载所有内容。这里,我们聚焦于"java编写的分页操作"这一主题,结合描述中的信息...
在Java Web开发中,与Oracle数据库进行交互时,分页功能是常见的需求,尤其是在处理大量数据时,为了提高用户体验和加载速度,分批次地显示数据是必不可少的。本项目提供的源代码正是针对这一需求,提供了在Java Web...
在Java Web开发中,分页是一项非常常见的需求,它能够帮助用户更有效地浏览大量数据,提高用户体验。本DEMO主要展示了如何实现一个通用的分页功能,覆盖了后台和前台的处理逻辑。以下是对这个主题的详细阐述: 一、...
你需要在这个模板中使用迭代器遍历当前页的数据,并显示分页导航链接。 6. **拦截器(Interceptor)**:Struts2的拦截器可以用来增强Action的处理逻辑,例如实现通用的分页功能。你可以创建一个分页拦截器,自动...
- **示例**:可能有示例代码或测试用例,展示如何在项目中使用这个组件。 - **文档**:可能包括用户手册或API文档,帮助理解组件的使用方法和注意事项。 - **资源文件**:如CSS和JavaScript文件,用于前端分页展示的...
在`PageAction.java`中,你可以使用Spring JDBC或Hibernate等ORM框架来与数据库交互,获取数据并计算总页数。返回的数据应包含当前页的记录,同时,Action还需要提供关于总页数和当前页的信息,以便前端构建分页导航...
在Java开发中,分页是数据管理中一个非常常见的需求,尤其在大数据量的Web应用中,为了提高用户体验,我们通常需要将数据分批次展示,而不是一次性加载所有数据。这不仅可以减少服务器的压力,还能使用户界面更加...
在Java开发中,分页技术是一项非常重要的功能,特别是在处理大量数据时,为了提高用户体验,我们需要将结果集分段展示,而不是一次性加载所有数据。本资料汇总了多种Java分页技术,涵盖了Struts框架下的实现方式,...
在MyBatis配置文件中引入PageHelper,然后在Mapper接口方法中使用`Page`对象作为参数,MyBatis会自动生成分页SQL。例如: ```java Page<User> selectUsersByPage(Page<User> page); ``` 六、前端展示 前端通常...
4. 分页组件:在Web开发中,我们经常使用各种分页组件,比如在Java Web中,Spring MVC框架提供了`Pageable`接口和`Page`对象来支持分页。而在前端,Vue.js有`element-ui`的`el-pagination`,React有`react-paginate`...
Java无刷新分页技术是现代Web应用中常见的一种优化用户体验的方法,它允许用户在不重新加载整个页面的情况下浏览页面的不同部分,特别是在数据量大、需要分页显示的场景下,如电商的商品列表、论坛的帖子等。...
在Java编程中,分页是Web应用程序中一个非常重要的功能,尤其在大数据量展示时,它可以帮助用户有条不紊地浏览数据,提高用户体验。这里的"JAVA分页源代码需要可以看下"提供了分页实现的源代码示例,我们可以深入...
在使用JDBC之前,我们需要在项目中引入MySQL的JDBC驱动,通常是`mysql-connector-java`的jar包。 2. **建立数据库连接**: 使用`DriverManager.getConnection()`方法建立与MySQL数据库的连接。首先,需要加载...
Java是一种广泛使用的编程语言,尤其在企业级应用和服务器端开发中占据主导地位。本文将深入探讨如何使用Java来根据模板导出包含统计图的PDF文档。主要涉及的技术包括iText库、FreeMarker模板引擎以及可能的数据可视...
在Java编程语言中,"JAP分页"通常指的是Java应用程序中的分页查询技术,用于在大量数据中实现高效的检索和展示。这个压缩包文件名"JAVA JAP分页写法大全"暗示了它可能包含各种不同的分页实现示例,这对于初学者来说...
在实际的Java Web应用中,前端页面通常使用JSP或Freemarker等模板引擎进行数据展示。可以设计一个简单的分页组件,包含页码显示和翻页按钮,通过后端传入的数据动态渲染页面。 ### 总结 通过上述分析可以看出,Java...
本篇将详细介绍如何使用Java实现数据库数据的分页显示,特别关注使用伪列`rownum`来实现高效分页的方法。 首先,我们要理解数据库分页的基本概念。分页是将数据库查询结果分割成若干部分(页),每次只返回一页的...
在Java编程领域,分页控件是Web应用中不可或缺的一部分,尤其在处理大量数据时,分页能够提高用户体验,减少服务器负载。本篇文章将详细解析标题为"JAVA分页控件"的相关知识点,并以提供的两个文件`...