知识大全 用Spring的JdbcTemplate实现分页功能
Posted 语句
篇首语:人生何适不艰难,赖是胸中万斛宽。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Spring的JdbcTemplate实现分页功能相关的知识,希望对你有一定的参考价值。
用Spring的JdbcTemplate实现分页功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
最近使用了spring中的JdbcTemplate实现数据库的查询和插入操作 发现spring的JdbcTemplate 不象HibernateTemplate那么好 已经实现了分页功能 所以要自己实现 使用getJdbcTemplate() queryForList(string sql)得到的结果集是所有的 如果你的查询有 条记录 或者更多 速度肯定慢了 当然你可以通过resultset中的游标控制查询的起始和结束 我这里用的是Oracle数据库 使用伪列ROWNUM来实现分页 我的分页代码如下 package deity ranking util;import java util List; import sprire JdbcTemplate; import sprire support JdbcDaoSupport; /** * 分页函数 * * @author allenpan */public class Pagination extends JdbcDaoSupport public static final int NUMBERS_PER_PAGE = ; //一页显示的记录数 private int numPerPage; //记录总数 private int totalRows; //总页数 private int totalPages; //当前页码 private int currentPage; //起始行数 private int startIndex; //结束行数 private int lastIndex; //结果集存放List private List resultList; //JdbcTemplate jTemplate private JdbcTemplate jTemplate; /** * 每页显示 条记录的构造函数 使用该函数必须先给Pagination设置currentPage jTemplate初值 * @param sql oracle语句 */ public Pagination(String sql) if(jTemplate == null) throw new IllegalArgumentException( deity ranking util Pagination jTemplate is null please initial it first ); else if(sql equals( )) throw new IllegalArgumentException( deity ranking util Pagination sql is empty please initial it first ); new Pagination(sql currentPage NUMBERS_PER_PAGE jTemplate); /**分页构造函数 * @param sql 根据传入的sql语句得到一些基本分页信息 * @param currentPage 当前页 * @param numPerPage 每页记录数 * @param jTemplate JdbcTemplate实例 */ public Pagination(String sql int currentPage int numPerPage JdbcTemplate jTemplate) if(jTemplate == null) throw new IllegalArgumentException( deity ranking util Pagination jTemplate is null please initial it first ); else if(sql == null || sql equals( )) throw new IllegalArgumentException( deity ranking util Pagination sql is empty please initial it first ); //设置每页显示记录数 setNumPerPage(numPerPage); //设置要显示的页数 setCurrentPage(currentPage); //计算总记录数 StringBuffer totalSQL = new StringBuffer( SELECT count(*) FROM ( ); totalSQL append(sql); totalSQL append( ) totalTable ); //给JdbcTemplate赋值 setJdbcTemplate(jTemplate); //总记录数 setTotalRows(getJdbcTemplate() queryForInt(totalSQL toString())); //计算总页数 setTotalPages(); //计算起始行数 setStartIndex(); //计算结束行数 setLastIndex(); System out println( lastIndex= +lastIndex);////////////////// //构造oracle数据库的分页语句 StringBuffer paginationSQL = new StringBuffer( SELECT * FROM ( ); paginationSQL append( SELECT temp * ROWNUM num FROM ( ); paginationSQL append(sql); paginationSQL append( ) temp where ROWNUM <= + lastIndex); paginationSQL append( ) WHERE num > + startIndex); //装入结果集 setResultList(getJdbcTemplate() queryForList(paginationSQL toString())); /** * @param args */ public static void main(String[] args) // TODO Auto generated method stub public int getCurrentPage() return currentPage; public void setCurrentPage(int currentPage) this currentPage = currentPage; public int getNumPerPage() return numPerPage; public void setNumPerPage(int numPerPage) this numPerPage = numPerPage; public List getResultList() return resultList; public void setResultList(List resultList) this resultList = resultList; public int getTotalPages() return totalPages; //计算总页数 public void setTotalPages() if(totalRows % numPerPage == ) this totalPages = totalRows / numPerPage; else this totalPages = (totalRows / numPerPage) + ; public int getTotalRows() return totalRows; public void setTotalRows(int totalRows) this totalRows = totalRows; public int getStartIndex() return startIndex; public void setStartIndex() this startIndex = (currentPage ) * numPerPage; public int getLastIndex() return lastIndex; public JdbcTemplate getJTemplate() return jTemplate; public void setJTemplate(JdbcTemplate template) jTemplate = template; //计算结束时候的索引 public void setLastIndex() System out println( totalRows= +totalRows);/////////// System out println( numPerPage= +numPerPage);/////////// if( totalRows < numPerPage) this lastIndex = totalRows; else if((totalRows % numPerPage == ) || (totalRows % numPerPage != && currentPage < totalPages)) this lastIndex = currentPage * numPerPage; else if(totalRows % numPerPage != && currentPage == totalPages)//最后一页 this lastIndex = totalRows ; 在我的业务逻辑代码中 /** * find season ranking list from DC * @param areaId 选手区域id * @param rankDate 赛季 * @param category 类别 * @param characterName 角色名 * @return List */ public List findSeasonRankingList(Long areaId int rankYear int rankMonth Long categoryId String characterName) //SQL语句 StringBuffer sql = new StringBuffer( SELECT C USERID userid D POSNAME posname C GAMEID gameid C AMOUNT amount C RANK rank FROM ); //表 sql append( (SELECT B USERID USERID ); sql append( B POSID POSID ); sql append( A DISTRICT_CODE DISTRICTCODE ); sql append( A GAMEID GAMEID ); sql append( AMOUNT AMOUNT ); sql append( RANK RANK ); sql append( FROM TB_FS_RANK A ); sql append( LEFT JOIN TB_CHARACTER_INFO B ); sql append( ON A DISTRICT_CODE = B DISTRICT_CODE ); sql append( AND A GAMEID = B GAMEID ); //附加条件 if(areaId != null && areaId intValue() != ) sql append( and A DISTRICT_CODE = + areaId intValue()); if( rankYear > && rankMonth > ) //hql append( and sas id dt >= to_date( + rankYear + + rankMonth + : : + YYYY MM DD HH :MI:SS ); //hql append( and sas id dt <= to_date( + rankYear + + rankMonth + + TimeTool findMaxDateInMonth(rankYear rankMonth) + : : + YYYY MM DD HH :MI:SS ); sql append( and A DT = fn_time_convert(to_date( + rankYear + + rankMonth + + YYYY MM )) ); if(categoryId != null && categoryId intValue() != ) sql append( and A CID = + categoryId intValue()); if(characterName != null && !characterName trim() equals( )) sql append( and A GAMEID = + characterName trim()+ ); sql append( ORDER BY RANK ASC) C ); sql append( LEFT JOIN TB_FS_POSITION D ); sql append( ON C POSID = D POSID ); sql append( ORDER BY C RANK ); System out println( hql= +sql toString());//////////////// //使用自己的分页程序控制结果集 Pagination pageInfo = new Pagination(sql toString() getJdbcTemplate()); return pageInfo getResultList(); //return getJdbcTemplate() queryForList(sql toString()); cha138/Article/program/Java/ky/201311/28840相关参考
对于分页主要思想无非两种一是从数据库取出所有记录后进行分页另一种思路是在取出数据的同时进行分页然后在页面显示昨晚查了不少资料对目前流行的分页方式总结了下 本人目前有个项目要用到Spring的Jd
用Struts2实现列表显示和分页功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下是在前
用Springframework实现定时器功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 采
刚做完一个电影网站网站新注册用户时需要发送email进行确认但是这个功能不是由我来负责的在下对此功能颇有好奇之心于是自己就搭建了一个小的spring项目来进行实践 声明代码里有些内容并非是我一个
知识大全 GridView分页的实现以及自定义分页样式功能实例
GridView分页的实现以及自定义分页样式功能实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
有分页功能的WEB打印 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <><h
ASP.NET实现新闻页面的分页功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
ASP程序实现可以保存参数值的分页功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <%
用AspNetPager控件最详细的分页实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
DataGrid同时具有分页和排序功能及注意点 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!当Da