---------------------- android培训、java培训、期待与您交流! ----------------------
hibernate框架为我们提供了分页的方法,在运用分页的过程中感觉特别神奇,大批量的数据是如何优化,并且从数据库中查询出来,通过对视频的学习,以及网上的资料,以及基本了解了hibernate底层分页的原因。
将sql的语句打印出来(可以通过hibernate进行配置将hibernate.show_sql设置为true),便可以发现sql语句在hibernate中进行的封装,如原来的sql语句为:
String sql=" from Sb as Sb";
Query query=factory.getCurrentSession().createQuery(sql);
query.setFirstResult(page.getBeginIndex());
query.setMaxResults(page.getEveryPage());
return query.list();
但在底层sql语句进行了一定的封装,如在oracle中
- public boolean supportsLimit(); {
- return true;
- }
- public String getLimitString(String sql); {
- StringBuffer pagingSelect = new StringBuffer(100);;
- pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");;
- pagingSelect.append(sql);;
- pagingSelect.append(" ); row_ where rownum <= ?); where rownum_ > ?");;
- return pagingSelect.toString();;
- } 其实他是对sql进行了封装的,Oracle采用嵌套3层的查询语句结合rownum来实现分页,这在Oracle上是最快的方式,如果只是一层或者两层的查询语句的rownum不能支持order by。
如果在mysql中
- public boolean supportsLimit(); {
- return true;
- }
- public String getLimitString(String sql); {
- StringBuffer pagingSelect = new StringBuffer(100);;
- pagingSelect.append(sql);;
- pagingSelect.append(" limit ?, ?");;
- return pagingSelect.toString();;
- }
除此之外,Interbase,PostgreSQL,HSQL也支持分页的sql语句,只要正确的配置了方言,这就可以实现分页了,给大家一个对应方言的网站吧 http://blog.csdn.net/haofeng82/article/details/1575303 .
---------------------- android培训、java培训、期待与您交流! ----------------------