hibernate分页.docx

上传人:b****8 文档编号:23812674 上传时间:2023-05-21 格式:DOCX 页数:35 大小:46.52KB
下载 相关 举报
hibernate分页.docx_第1页
第1页 / 共35页
hibernate分页.docx_第2页
第2页 / 共35页
hibernate分页.docx_第3页
第3页 / 共35页
hibernate分页.docx_第4页
第4页 / 共35页
hibernate分页.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

hibernate分页.docx

《hibernate分页.docx》由会员分享,可在线阅读,更多相关《hibernate分页.docx(35页珍藏版)》请在冰豆网上搜索。

hibernate分页.docx

hibernate分页

通常使用的Hibernate通常是三种:

hql查询,QBC查询和QBE查询:

1、QBE(QureyByExample)检索方式

QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅在某些场合下有用。

一个典型的使用场合就是在查询窗口中让用户输入一系列的查询条件,然后返回匹配的对象。

QBE只支持=和like比较运算符,无法不大区间值,及其或的匹配。

在这种情况下,还是采用HQL检索方式或QBC检索方式。

Java代码

1./** 

2. * @function 根据传递过来的Object,分页显示在数据库中与其匹配的记录 

3. * @param pageNo 

4. *            当前页数 

5. * @param pageSize 

6. *            每页显示的记录数 

7. * @param object 

8. *            将查询条件封装为Object 

9. * @return 将查询结果封装为Pager返回 

10. */  

11.public Pager findPageByExample(int pageNo, int pageSize, Object object)  

12.{  

13.    Pager pager = null;  

14.    try  

15.    {  

16.        Criteria criteria = this.getSession().createCriteria(  

17.                Class.forName(this.getEntity()));  

18.  

19.        if (object !

= null)  

20.        {  

21.            criteria.add(Example.create(object).enableLike());  

22.        }  

23.  

24.        // 获取根据条件分页查询的总行数  

25.        int rowCount = (Integer) criteria.setProjection(  

26.                Projections.rowCount()).uniqueResult();  

27.        criteria.setProjection(null);  

28.  

29.        criteria.setFirstResult((pageNo - 1) * pageSize);  

30.        criteria.setMaxResults(pageSize);  

31.  

32.        List result = criteria.list();  

33.  

34.        pager = new Pager(pageSize, pageNo, rowCount, result);  

35.  

36.    } catch (RuntimeException re)  

37.    {  

38.        throw re;  

39.    } finally  

40.    {  

41.        return pager;  

42.    }  

43.  

44.}  

/**

*@function根据传递过来的Object,分页显示在数据库中与其匹配的记录

*@parampageNo

*当前页数

*@parampageSize

*每页显示的记录数

*@paramobject

*将查询条件封装为Object

*@return将查询结果封装为Pager返回

*/

publicPagerfindPageByExample(intpageNo,intpageSize,Objectobject)

{

Pagerpager=null;

try

{

Criteriacriteria=this.getSession().createCriteria(

Class.forName(this.getEntity()));

if(object!

=null)

{

criteria.add(Example.create(object).enableLike());

}

//获取根据条件分页查询的总行数

introwCount=(Integer)criteria.setProjection(

Projections.rowCount()).uniqueResult();

criteria.setProjection(null);

criteria.setFirstResult((pageNo-1)*pageSize);

criteria.setMaxResults(pageSize);

Listresult=criteria.list();

pager=newPager(pageSize,pageNo,rowCount,result);

}catch(RuntimeExceptionre)

{

throwre;

}finally

{

returnpager;

}

}

注意代码的第20行,即criteria.add(Example.create(object).enableLike());这一行,需将Example.create(object)调用.enableLike()方法,不然不能模糊查询。

在BO层将需要模糊查询的列用"%%"串起来,不然仍然和"="一样。

BO层代码:

Java代码

1./** 

2. * @function 将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录 

3. * @param pageNo 

4. *            当前的页码 

5. * @param pageSize 

6. *            每页显示的记录数 

7. * @param mendName 

8. *            抢修人员的名称 

9. * @param specialty 

10. *            抢修人员的工种 

11. * @param post 

12. *            抢修人员的职称 

13. * @return 将符合条件的记录数以及页码信息封装成PagerBean返回 

14. */  

15.public Pager getInfoByQuery(int pageNo, int pageSize, String mendName,  

16.        String specialty, String post)  

17.{  

18.  

19.    EicMend eicMend = new EicMend();  

20.    if (mendName !

= null && mendName.length() > 0)  

21.    {  

22.        eicMend.setMendname("%" + mendName + "%");  

23.    }  

24.    if (specialty !

= null && specialty.length() > 0)  

25.    {  

26.        eicMend.setSpecialty(specialty);  

27.    }  

28.    if (post !

= null && post.length() > 0)  

29.    {  

30.        eicMend.setPost(post);  

31.    }  

32.  

33.    Pager pager = erpManagerDao  

34.            .findPageByExample(pageNo, pageSize, eicMend);  

35.    return pager;  

36.}  

/**

*@function将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录

*@parampageNo

*当前的页码

*@parampageSize

*每页显示的记录数

*@parammendName

*抢修人员的名称

*@paramspecialty

*抢修人员的工种

*@parampost

*抢修人员的职称

*@return将符合条件的记录数以及页码信息封装成PagerBean返回

*/

publicPagergetInfoByQuery(intpageNo,intpageSize,StringmendName,

Stringspecialty,Stringpost)

{

EicMendeicMend=newEicMend();

if(mendName!

=null&&mendName.length()>0)

{

eicMend.setMendname("%"+mendName+"%");

}

if(specialty!

=null&&specialty.length()>0)

{

eicMend.setSpecialty(specialty);

}

if(post!

=null&&post.length()>0)

{

eicMend.setPost(post);

}

Pagerpager=erpManagerDao

.findPageByExample(pageNo,pageSize,eicMend);

returnpager;

}

执行SQL语句如下:

Sql代码

1.Hibernate:

 select count(*) as y0_ from YJZX.EIC_MEND this_ where   

2.(this_.MENDNAME like ?

 and this_.POST like ?

)  

3.  

4.Hibernate:

 select * from ( select this_.MENDID as MENDID23_0_, ……  

5.this_.EXPERTREMARK as EXPERTR28_23_0_ from YJZX.EIC_MEND this_ where   

6.(this_.MENDNAME like ?

 and this_.POST like ?

) ) where rownum <= ?

  

Hibernate:

selectcount(*)asy0_fromYJZX.EIC_MENDthis_where

(this_.MENDNAMElike?

andthis_.POSTlike?

Hibernate:

select*from(selectthis_.MENDIDasMENDID23_0_,……

this_.EXPERTREMARKasEXPERTR28_23_0_fromYJZX.EIC_MENDthis_where

(this_.MENDNAMElike?

andthis_.POSTlike?

))whererownum<=?

所以只需将需模糊查询的列用“%%”链接即可。

2、QBC(QureyByCriteria)检索方式

      采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句。

QBCAPI提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Restrictions接口组成,它支持在运行时动态生成查询语句。

比较常见的是两种传参方式:

一种是用map传参,另一种是用Criterion…不定参数传参。

Map传参方式范例如下:

DAO层:

Java代码

1./** 

2. * @function 分页显示符合所有的记录数,将查询结果封装为Pager 

3. * @param pageNo 

4. *            当前页数 

5. * @param pageSize 

6. *            每页显示的条数 

7. * @param map 

8. *            将查询条件封装为map 

9. * @return 查询结果Pager 

10. */  

11.public Pager findPageByCriteria(int pageNo, int pageSize, Map map)  

12.{  

13.    Pager pager = null;  

14.    try  

15.    {  

16.        Criteria criteria = this.getSession().createCriteria(  

17.                Class.forName(this.getEntity()));  

18.  

19.        if (map !

= null)  

20.        {  

21.            Set keys = map.keySet();  

22.            for (String key :

 keys)  

23.            {  

24.                criteria.add(Restrictions.like(key, map.get(key)));  

25.            }  

26.        }  

27.  

28.        // 获取根据条件分页查询的总行数  

29.        int rowCount = (Integer) criteria.setProjection(  

30.                Projections.rowCount()).uniqueResult();  

31.        criteria.setProjection(null);  

32.  

33.        criteria.setFirstResult((pageNo - 1) * pageSize);  

34.        criteria.setMaxResults(pageSize);  

35.  

36.        List result = criteria.list();  

37.  

38.        pager = new Pager(pageSize, pageNo, rowCount, result);  

39.  

40.    } catch (RuntimeException re)  

41.    {  

42.        throw re;  

43.    } finally  

44.    {  

45.        return pager;  

46.    }  

47.  

48.}  

/**

*@function分页显示符合所有的记录数,将查询结果封装为Pager

*@parampageNo

*当前页数

*@parampageSize

*每页显示的条数

*@parammap

*将查询条件封装为map

*@return查询结果Pager

*/

publicPagerfindPageByCriteria(intpageNo,intpageSize,Mapmap)

{

Pagerpager=null;

try

{

Criteriacriteria=this.getSession().createCriteria(

Class.forName(this.getEntity()));

if(map!

=null)

{

Setkeys=map.keySet();

for(Stringkey:

keys)

{

criteria.add(Restrictions.like(key,map.get(key)));

}

}

//获取根据条件分页查询的总行数

introwCount=(Integer)criteria.setProjection(

Projections.rowCount()).uniqueResult();

criteria.setProjection(null);

criteria.setFirstResult((pageNo-1)*pageSize);

criteria.setMaxResults(pageSize);

Listresult=criteria.list();

pager=newPager(pageSize,pageNo,rowCount,result);

}catch(RuntimeExceptionre)

{

throwre;

}finally

{

returnpager;

}

}

Map传参方式对应BO层代码:

Java代码

1./** 

2. * @function 将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录 

3. * @param pageNo 

4. *            当前的页码 

5. * @param pageSize 

6. *            每页显示的记录数 

7. * @param mendName 

8. *            抢修人员的名称 

9. * @param specialty 

10. *            抢修人员的工种 

11. * @param post 

12. *            抢修人员的职称 

13. * @return 将符合条件的记录数以及页码信息封装成PagerBean返回 

14. */  

15.public Pager getInfoByQuery2(int pageNo, int pageSize, String mendName,  

16.        String specialty, String post)  

17.{  

18.  

19.    Map map = new HashMap();  

20.  

21.    if (mendName !

= null && mendName.length() > 0)  

22.    {  

23.        map.put("mendname", "%" + mendName + "%");  

24.    }  

25.    if (specialty !

= null && specialty.length() > 0)  

26.    {  

27.        map.put("specialty", specialty);  

28.    }  

29.    if (post !

= null && post.length() > 0)  

30.    {  

31.        map.put("post", post);  

32.    }  

33.  

34.    Pager pager = erpManagerDao.findPageByCriteria(pageNo, pageSize, map);  

35.    return pager;  

36.}  

/**

*@function将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录

*@parampageNo

*当前的页码

*@parampageSize

*每页显示的记录数

*@parammendName

*抢修人员的名称

*@paramspecialty

*抢修人员的工种

*@parampost

*抢修人员的职称

*@return将符合条件的记录数以及页码信息封装成PagerBean返回

*/

publicPagergetInfoByQuery2(intpageNo,intpageSize,StringmendName,

Stringspecialty,Stringpost)

{

Mapmap=newHashMap();

if(mendName!

=null&&mendName.length()>0)

{

map.put("mendname","%"+mendName+"%");

}

if(specialty!

=null&&specialty.length()>0)

{

map.put("specialty",specialty);

}

if(post!

=null&&post.length()>0)

{

map.put("post",post);

}

Pagerpager=erpManagerDao.findPageByCriteria(pageNo,pageSize,map);

returnpager;

}

第二种方式:

Criterion…不定参数传参方式。

其代码如下所示:

DAO层代码:

Java代码

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1