仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 521|回复: 12
打印 上一主题 下一主题

[学习教程] 了解下JAVA的用Spring的JdbcTemplate完成分页功效

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),
比来利用了spring中的JdbcTemplate完成数据库的查询和拔出操纵,发明spring的JdbcTemplate不象HibernateTemplate那末好,已完成了分页功效。以是要本人完成,利用getJdbcTemplate().queryForList(stringsql)失掉的了局集是一切的。
假如你的查询有10000笔记录,大概更多,速率一定慢了,固然你能够经由过程resultset中的游标把持查询的肇端和停止。我这里用的是Oracle数据库,利用伪列ROWNUM来完成分页。我的分页代码以下:
packagecom.deity.ranking.util;importjava.util.List;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.jdbc.core.support.JdbcDaoSupport;
/***分页函数* *@authorallenpan*/publicclassPaginationextendsJdbcDaoSupport{
publicstaticfinalintNUMBERS_PER_PAGE=10;
//一页显现的纪录数
privateintnumPerPage;
//纪录总数
privateinttotalRows;
//总页数
privateinttotalPages;
//以后页码
privateintcurrentPage;
//肇端行数
privateintstartIndex;
//停止行数
privateintlastIndex;
//了局集寄存List
privateListresultList;
//JdbcTemplatejTemplate
privateJdbcTemplatejTemplate;
/**
*每页显现10笔记录的机关函数,利用该函数必需先给Pagination设置currentPage,jTemplate初值
*@paramsqloracle语句
*/
publicPagination(Stringsql){
if(jTemplate==null){
thrownewIllegalArgumentException("com.deity.ranking.util.Pagination.jTemplateisnull,pleaseinitialitfirst.");
}elseif(sql.equals("")){
thrownewIllegalArgumentException("com.deity.ranking.util.Pagination.sqlisempty,pleaseinitialitfirst.");
}
newPagination(sql,currentPage,NUMBERS_PER_PAGE,jTemplate);
}
/**分页机关函数
*@paramsql依据传进的sql语句失掉一些基础分页信息
*@paramcurrentPage以后页
*@paramnumPerPage每页纪录数
*@paramjTemplateJdbcTemplate实例
*/
publicPagination(Stringsql,intcurrentPage,intnumPerPage,JdbcTemplatejTemplate){
if(jTemplate==null){
thrownewIllegalArgumentException("com.deity.ranking.util.Pagination.jTemplateisnull,pleaseinitialitfirst.");
}elseif(sql==null||sql.equals("")){
thrownewIllegalArgumentException("com.deity.ranking.util.Pagination.sqlisempty,pleaseinitialitfirst.");
}
//设置每页显现纪录数
setNumPerPage(numPerPage);
//设置要显现的页数
setCurrentPage(currentPage);
//盘算总纪录数
StringBuffertotalSQL=newStringBuffer("SELECTcount(*)FROM(");
totalSQL.append(sql);
totalSQL.append(")totalTable");
//给JdbcTemplate赋值
setJdbcTemplate(jTemplate);
//总纪录数
setTotalRows(getJdbcTemplate().queryForInt(totalSQL.toString()));
//盘算总页数
setTotalPages();
//盘算肇端行数
setStartIndex();
//盘算停止行数
setLastIndex();
System.out.println("lastIndex="+lastIndex);//////////////////
//机关oracle数据库的分页语句
StringBufferpaginationSQL=newStringBuffer("SELECT*FROM(");
paginationSQL.append("SELECTtemp.*,ROWNUMnumFROM(");
paginationSQL.append(sql);
paginationSQL.append(" )tempwhereROWNUM<="+lastIndex);
paginationSQL.append(")WHERE num>"+startIndex);
//装进了局集
setResultList(getJdbcTemplate().queryForList(paginationSQL.toString()));
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub    }
publicintgetCurrentPage(){
returncurrentPage;
}
publicvoidsetCurrentPage(intcurrentPage){
this.currentPage=currentPage;
}
publicintgetNumPerPage(){
returnnumPerPage;
}
publicvoidsetNumPerPage(intnumPerPage){
this.numPerPage=numPerPage;
}
publicListgetResultList(){
returnresultList;    }
publicvoidsetResultList(ListresultList){
this.resultList=resultList;
}
publicintgetTotalPages(){
returntotalPages;
}
//盘算总页数
publicvoidsetTotalPages(){
if(totalRows%numPerPage==0){
this.totalPages=totalRows/numPerPage;
}else{
this.totalPages =(totalRows/numPerPage)+1;
}
}
publicintgetTotalRows(){
returntotalRows;
}
publicvoidsetTotalRows(inttotalRows){
this.totalRows=totalRows;
}
publicintgetStartIndex(){
returnstartIndex;
}
publicvoidsetStartIndex(){
this.startIndex=(currentPage-1)*numPerPage;
}
publicintgetLastIndex(){
returnlastIndex;
}
publicJdbcTemplategetJTemplate(){
returnjTemplate;
}
publicvoidsetJTemplate(JdbcTemplatetemplate){
jTemplate=template;
}
//盘算停止时分的索引
publicvoidsetLastIndex(){
System.out.println("totalRows="+totalRows);///////////
System.out.println("numPerPage="+numPerPage);///////////
if(totalRows<numPerPage){
this.lastIndex=totalRows;
}elseif((totalRows%numPerPage==0)||(totalRows%numPerPage!=0&&currentPage<totalPages)){
this.lastIndex=currentPage*numPerPage;
}elseif(totalRows%numPerPage!=0&&currentPage==totalPages){//最初一页
this.lastIndex=totalRows;
}
}}在我的营业逻辑代码中:
/**
*findseasonrankinglistfromDC
*@paramareaId选手地区id
*@paramrankDate赛季
*@paramcategory种别
*@paramcharacterName脚色名
*@returnList
*/
publicListfindSeasonRankingList(LongareaId,intrankYear,intrankMonth,
LongcategoryId,StringcharacterName){
//SQL语句
StringBuffersql=newStringBuffer("SELECTC.USERIDuserid,D.POSNAMEposname,C.GAMEIDgameid,C.AMOUNTamount,C.RANKrankFROM");
//表            sql.append("(SELECTB.USERIDUSERID,");
sql.append("B.POSIDPOSID,");
sql.append("A.DISTRICT_CODEDISTRICTCODE,");
sql.append("A.GAMEIDGAMEID,");
sql.append("AMOUNTAMOUNT,");
sql.append("RANKRANK");
sql.append("FROMTB_FS_RANKA");
sql.append("LEFTJOINTB_CHARACTER_INFOB");
sql.append("ONA.DISTRICT_CODE=B.DISTRICT_CODE");
sql.append("ANDA.GAMEID=B.GAMEID");
//附加前提
if(areaId!=null&&areaId.intValue()!=0){
sql.append("andA.DISTRICT_CODE="+areaId.intValue());
}
if(rankYear>1970&&rankMonth>0){
//hql.append("andsas.id.dt>=to_date("+rankYear+"-"+rankMonth+"-0100:00:00,"+"YYYY-MM-DDHH24:MI:SS");
//hql.append("andsas.id.dt<=to_date("+rankYear+"-"+rankMonth+"-"+TimeTool.findMaxDateInMonth(rankYear,rankMonth)+"23:59:59,"+"YYYY-MM-DDHH24:MI:SS");
sql.append("andA.DT=fn_time_convert(to_date("+rankYear+"-"+rankMonth+","+"YYYY-MM))");
}
if(categoryId!=null&&categoryId.intValue()!=0){
sql.append("andA.CID="+categoryId.intValue());
}
if(characterName!=null&&!characterName.trim().equals("")){
sql.append("andA.GAMEID="+characterName.trim()+"");
}
sql.append("ORDERBYRANKASC)C");
sql.append("LEFTJOINTB_FS_POSITIOND");
sql.append("ONC.POSID=D.POSID");
sql.append("ORDERBYC.RANK");
System.out.println("hql="+sql.toString());////////////////
//利用本人的分页程序把持了局集
PaginationpageInfo=newPagination(sql.toString(),1,10,getJdbcTemplate());
returnpageInfo.getResultList();
//returngetJdbcTemplate().queryForList(sql.toString());
}

主要缺点就是:速度比较慢,没有C和C++快
若相依 该用户已被删除
沙发
发表于 2015-1-19 05:59:27 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
admin 该用户已被删除
板凳
发表于 2015-1-22 21:55:11 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
飘灵儿 该用户已被删除
地板
发表于 2015-1-25 18:45:12 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
小女巫 该用户已被删除
5#
发表于 2015-1-26 21:40:09 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
分手快乐 该用户已被删除
6#
发表于 2015-2-4 20:39:48 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
莫相离 该用户已被删除
7#
 楼主| 发表于 2015-2-5 15:38:47 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
谁可相欹 该用户已被删除
8#
发表于 2015-2-12 19:30:02 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
若天明 该用户已被删除
9#
发表于 2015-2-16 11:17:17 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
再见西城 该用户已被删除
10#
发表于 2015-3-5 04:21:58 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
精灵巫婆 该用户已被删除
11#
发表于 2015-3-10 16:46:28 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
柔情似水 该用户已被删除
12#
发表于 2015-3-17 08:11:33 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
只想知道 该用户已被删除
13#
发表于 2015-3-24 03:06:54 | 只看该作者
是一种突破用户端机器环境和CPU
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 05:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表