我想问的问题是关于hibernate的动态分页查询的问题。1,动态,2,分页。我们都知道,动态查询用Criteria是非常方便的,,
比如。 public Listfn(String name,Session session,int first,int maxResult)
{
Criteria criteria=session.createCriteria(Student.class);
int dataCount=0;
if(name!=null && name.equals(""))
Criteria.add(name);
List list=criteria.list();
if(list.size())
{
dataCount=list.size(); //这个是查询的总数,以备分页的时候用到。
}
criteria.setFirstResult((first-1)*maxResult);
criteria.setMaxResults(maxResult);
list=criteria.list();
return list;
}上面,的第一个查询我们可以看出是查找一个符合条件的有多少个数据,,但是如果数据两很打,那么这个效率是很低的,因为hibernate查询之后,会把查到的数据赋值给Student这个类的实例,如果有10W条记录 ,那么要执行10W次,而且,第二次又执行一次查询。虽然这个查询不会对性能造成什么影响。。所以,我想问一下有什么解决办法。。HQL和QBC(也就是上面这种)是一样的效果,用sql倒是可以查询出来,,但是动态查询用sql ,拼接字符串是很麻烦的,请大家讲一下,,谢谢了。。
比如。 public Listfn(String name,Session session,int first,int maxResult)
{
Criteria criteria=session.createCriteria(Student.class);
int dataCount=0;
if(name!=null && name.equals(""))
Criteria.add(name);
List list=criteria.list();
if(list.size())
{
dataCount=list.size(); //这个是查询的总数,以备分页的时候用到。
}
criteria.setFirstResult((first-1)*maxResult);
criteria.setMaxResults(maxResult);
list=criteria.list();
return list;
}上面,的第一个查询我们可以看出是查找一个符合条件的有多少个数据,,但是如果数据两很打,那么这个效率是很低的,因为hibernate查询之后,会把查到的数据赋值给Student这个类的实例,如果有10W条记录 ,那么要执行10W次,而且,第二次又执行一次查询。虽然这个查询不会对性能造成什么影响。。所以,我想问一下有什么解决办法。。HQL和QBC(也就是上面这种)是一样的效果,用sql倒是可以查询出来,,但是动态查询用sql ,拼接字符串是很麻烦的,请大家讲一下,,谢谢了。。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货