分享
 
 
 

一个简洁的分页实现(三)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

我开始就是为了在Hibernate中使用分页才设计这个分页实现的,因为使用Hibernate时,查询后的结果被自动封装到一个List中了,所以使用起来特别方便,这里我做了一个比较庸俗的实现,就是查询参数只适合字符串类型,不过大部分查询还真的只是对字符串操作。

package treeroot.util;

import net.sf.hibernate.HibernateException;

import treeroot.common.dao.AbstractBaseDao;

/**

* @author treerot

* @version 1.0

* @since 2004-9-30

*/

public class HibernatePage extends AbstractPage implements Pageable

{

private String querySql;

private String countSql;

private String[] parameters;

public HibernatePage(int currentPage,String querySql,String countSql,String[] parameters) throws PageException{

this(currentPage,Pageable.DEFAULT_PAGESIZE,querySql,countSql,parameters);

}

public HibernatePage(int currentPage,int pageSize,String querySql,String countSql,String[] parameters)throws PageException

{

super(currentPage, pageSize);

this.querySql = querySql;

this.countSql = countSql;

this.parameters = parameters;

init();

}

protected void init() throws PageException

{

try{

this.count = AbstractBaseDao.queryCount(countSql);

int fromIndex = (this.getCurrentPage() - 1) * this.getPageSize();

int toIndex = Math.min(this.count, fromIndex + this.getPageSize());

this.result = AbstractBaseDao.find(this.querySql,this.parameters,fromIndex,toIndex);

}

catch (HibernateException e)

{

throw new PageException(e.getMessage());

}

}

}

这个类的设计并不是很合理的,因为查询只能接受字符串参数,但是如果只需要字符串参数就足够了。另外查询语句必须是JDBC风格的参数(?), 而不是Hibernate风格的(:=),你看过Dao里面的代码就知道为什么了。先看一下如何使用吧(一个Dao中的方法):

public Pageable findByName(String name,int currentPage) throws PageException{

String countSql="select count(*) from MyClass as c where c.name like ?";

String querySql="from MyClass as c where c.name like ?";

String[] parameter=new String[]{name};

return new HibernatePage(currentPage,countSql,querySql,parameter);

}

这个方法应该是比较简洁的,这里给出queryCount和find的实现,我对Hibernate的了解比较肤浅,所以下面的方法如果有什么不当的地方还望指出,谢谢!

public static int queryCount(String hql, String[] args) throws HibernateException

{

if (hql == null) throw new NullPointerException();

Object obj = null;

Transaction trans = null;

Session s = null;

try

{

s = HibernateSessionFactory.currentSession();

trans = s.beginTransaction();

Query q = s.createQuery(hql);

if (args != null)

{

for (int i = 0; i < args.length; i++){

q.setString(i, args[i]);

}

}

obj = q.uniqueResult();

trans.commit();

}

catch (HibernateException e)

{

if (trans != null)

{

try{

trans.rollback();

}

catch (HibernateException ex){//no need to care this Exception }

}

throw e;

}

return ((Integer) obj).intValue();

}

publicstatic List find(String hql, String[] args, int fromIndex, int toIndex)throws HibernateException

{

if (hql == null) throw new NullPointerException();

List l = null;

Transaction trans = null;

Session s = null;

try{

s = HibernateSessionFactory.currentSession();

trans = s.beginTransaction();

Query q = s.createQuery(hql);

if (args != null){

for (int i = 0; i < args.length; i++){

q.setString(i, args[i]);

}

}

if (fromIndex > -1){

if (toIndex > fromIndex){

q.setFirstResult(fromIndex);

q.setMaxResults(toIndex - fromIndex);

}

else{

throw new IndexOutOfBoundsException();

}

}

l = q.list();

trans.commit();

}

catch (HibernateException e){

if (trans != null){

try{

trans.rollback();

}

catch (HibernateException ex){ //no need to care this Exception }

}

throw e;

}

return l;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有