hibernate的分页真的通用吗?我这种情况怎么分页?

hyhy2203390 2014-08-18 08:54:16
public List<Score> queryImportedScore( int offset,int length,List<String> idList){
List<Score> scoreList = new ArrayList<Score>();
for(int i = 0;i<idList.size();i++){
String hql="from Score s where s.studentId="+idList.get(i);
@SuppressWarnings("unchecked")
List<Score> minList = hibernateTemplate.find(hql);
for(Score s : minList){
scoreList.add(s);
}
}
return scoreList;

}
我这种情况不知道偏移量和length该怎么设置了,难道我只能通过查询出所有结果以后再分页吗?

Query query = session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length); ??????????怎么设置?
...全文
281 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
乔不思 2014-09-06
  • 打赏
  • 举报
回复
hibernate本来效率就一般吧,楼主如果不用hibernateTemplate带的方法的话,完全可以针对具体的库,拼写自己的sql语句啊。在外部封装一个Page类不就结了。
skgary 2014-09-06
  • 打赏
  • 举报
回复
引用 2 楼 wlwlwlwl015 的回复:
你这样写效率低的不敢看,给你个建议,定义一个StringBuilder,通过循环去串接SQL,也就是在循环中append你参数中的那些id,通过in关键字就可以确定了查询范围,这样返回的就是所有数据的List。然后分页就是query.setFirstResult(offset)和query.setMaxResults(length),类似与limit的两个参数,直接得不到就简单计算一下。
其实这样写,效率也不高。 但很好奇楼主的原始需求是什么。。。 这个list是哪里来的呢?
火柴棍的坚强 2014-09-05
  • 打赏
  • 举报
回复
private HibernateTemplate ht; /** * 让springIOC容器将HibernateTemplate注入进来 */ public void setHt(HibernateTemplate ht) { this.ht = ht; } public List<User> findAllUserByFY(final Integer start, final Integer size) { return (List<User>) ht.execute(new HibernateCallback<List<User>>(){ //使用真正hibernate框架的相关api来进行业务处理 public List<User> doInHibernate(Session session) throws HibernateException,SQLException { String hql = "from User"; Query query = session.createQuery(hql); query.setFirstResult(start); query.setMaxResults(size); return query.list(); } });
suciver 2014-09-05
  • 打赏
  • 举报
回复
Query query = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); 这个就可以了,hibernate的分页原理,是以数据库的方言为准的,当配置的数据库方言后,后根据方言中的getLimitSqlString()不同的数据库使用分页关键字,其实就是hibernate内部会对你的sql增加分页关键字上去的,即便你的hql中没有分页关键字,hibernate会自动把分页关键字加上去,只有方言不中没有分页关键字支持时,hibernate就会用ResultSet的游标分页。
zy_think123 2014-08-19
  • 打赏
  • 举报
回复
你的sql语句是:String hql="from Score s where s.studentId="+idList.get(i); 先不说效率的问题,你先看你的查询结果,你确定是有很多条数据吗?有几十上百条码?如果没有的话,那么就没有必要分页了,同时,如果你是将List中的数据进行分页的话,那么就应该从list中取多少条数据就是,如果要从数据库分页的话,那么在查询的时候就要进行设置,而不是查询完了才进行设置,那个时候设置有个毛线用呀
作业本_ 2014-08-18
  • 打赏
  • 举报
回复
query.setFirstResult(),query.setMaxResults();可以取到一定范围内的数据,用来数据分页显示。
小灯光环 2014-08-18
  • 打赏
  • 举报
回复
你这样写效率低的不敢看,给你个建议,定义一个StringBuilder,通过循环去串接SQL,也就是在循环中append你参数中的那些id,通过in关键字就可以确定了查询范围,这样返回的就是所有数据的List。然后分页就是query.setFirstResult(offset)和query.setMaxResults(length),类似与limit的两个参数,直接得不到就简单计算一下。
hyhy2203390 2014-08-18
  • 打赏
  • 举报
回复
自己沙发,求解答

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧