当前位置:首页 » 编程语言 » hibernate分页sql

hibernate分页sql

发布时间: 2022-05-23 10:46:34

⑴ 用了hibernate是不是就不用写sql语句了,直接调用里面封装好的分页还要自己再写吗

hibernate有一个跟sql非常类似的语句 叫HQL语句,所以。。你还是得写。但是hibernate提供了很多方便的方法

⑵ hibernate 处理分页数据问题

如果用户的分数没有事先计算好的话,这样分页确实是会对性能有一定的影响,但是也没什么大事,因为分页本身就是要减少计算,减少查询,提高性能。每页都规定好固定的条数了,再连接查询下也无所谓性能问题。但我建议你使用视图查询会更合适一些,这样只对不同表的不同字段查询,性能会有所提高。

⑶ hibernate访问oracle分页SQL语句rownum子查询问题

第一个是从第几条开始,第二个是每页几条。
你看看你数据库里面的数据够不够分页,你这样只写两句就分页是不够的。
page = Paginator.showPage(, hql, paramValues, pageCurrent, pageSize);

/*
* 利用hql实现翻页
*/
public static Page showPage(PersistentBaseDao p, String hql,
Object[] paramValues, int pageCurrent, int pageSize) {
// 入口参数校验(无)
if (p == null) {
// log.debug("Paginator.p.hql is Empty");
}
if (hql.equals("") || hql == null) {
// log.debug("Paginator.showPage.hql is Empty");
}
if (p == null) {
// log.debug("Paginator.showPage.p is Empty");
}
PersistentBaseDao = (PersistentBaseDao) p;
// 如果当前页大于>总的页数,则让当前页等于总页数
int tempPageCount =0;

if (paramValues == null) {
tempPageCount = .getPageCount(hql, (Object[]) null, pageSize);
} else {
tempPageCount= .getPageCount(hql, paramValues, pageSize);
}
if (pageCurrent > tempPageCount) {
pageCurrent = tempPageCount;
}
// 如果当前页大于<1,则让当前页等于1
if (pageCurrent < 1) {
pageCurrent = 1;
}
// 调用.serarch()方法
if (paramValues == null) {
page = .search(hql, pageCurrent, pageSize);
} else {
page = .search(hql, paramValues, pageCurrent, pageSize);
}
// 为page对象设置当前页的属性
page.setPageCurrent(pageCurrent);
// 将page对象放在request对象中
return page;
}

/*
* 利用List实现翻页
*/
@SuppressWarnings("unchecked")
public static Page showPage(List list, int pageCurrent, int pageSize) {
// 入口参数校验(无)
if (list.isEmpty()) {
// log.debug("Paginator.showPage.list is Empty");
}
// 如果当前页大于>总的页数,则让当前页等于总页数
if (pageCurrent > page.getPageCount()) {
pageCurrent = page.getPageCount();
}
// 如果当前页大于<1,则让当前页等于1
if (pageCurrent < 1) {
pageCurrent = 1;
}
List ls = new ArrayList();
// 根据得到的list转化为page对象
if (list.size() % pageSize == 0) {
page.setPageCount((list.size() / pageSize));
} else {
page.setPageCount((list.size() / pageSize) + 1);
}
page.setPageCurrent(pageCurrent);
page.setRecordCound(list.size());
int stag = (pageCurrent - 1) * pageSize;
int etag = pageCurrent * pageSize;
for (int i = stag; i < list.size() && i < etag; i++) {
ls.add(list.get(i));
}
page.setDataList(ls);
return page;
}

⑷ hibernate如何处理不同数据库带来的分页操作呢MySQL中使用Limit,而Oracle中使用 rowNum,求大神详解

你只要符合他的hql语句规范, 他会根据你配置方言自动翻译成需要的sql语句, 所以你不用管, 这些已经在他底层实现了, MysqlDialect, OracleDialect, 你可以去看一下这个源码,比如Oracle中:

java">=newStringBuilder(sql.length()+100);
if(hasOffset){
pagingSelect.append("select*from(selectrow_.*,rownumrownum_from(");
}
else{
pagingSelect.append("select*from(");
}
pagingSelect.append(sql);
if(hasOffset){
pagingSelect.append(")row_)whererownum_<=?andrownum_>?");
}
else{
pagingSelect.append(")whererownum<=?");
}

if(isForUpdate){
pagingSelect.append("forupdate");
}

returnpagingSelect.toString();
}

你如果问的是hibernate是如何实现分页的,那么可以看一下他的文档,或者参考下面的文章:

http://my.oschina.net/kkdo/blog/724623

⑸ hibernate中分页查询怎么做的

public List<ComUserEntity> FindAll(final int page,final int pagesize) {//page是第几页 pagesize是 每页多少个

return this.getHibernateTemplate().execute(
new HibernateCallback<List<ComUserEntity>>() {
@Override
public List<ComUserEntity> doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery("from ComUserEntity"); //查询的JavaBean为 ComUserEntity
query.setFirstResult((page-1)*pagesize); //设置 查询起点
query.setMaxResults(page*pagesize); //查询终点 忘了是 pagesize 还是 page*pagesize了
return query.list();}
}
);
}

⑹ hibernate分页查询的时候是把数据全部查出来吗还是需要那一页查那一页呢

当然是查询每页需要的数据了,hibernate分页查询是与基于sql语句的简单分页查询道理是一样的,有setFirstResult(int arg)设置起始数据位置,setMaxResults(int arg);设置当前页所显示的最大数据量,依赖前台传回的页码变量进行数据交替从而实现分页

⑺ hibernate的sqlquery分页,尾页会出现上一页的数据

您好
估计是你的起始页没有控制住,showPage这个值应该没有变化或影响的。
debug一下,看看翻页的时候的时候,showPage这个值有没有变化。
希望对你有帮助。

⑻ Hibernate的分页bug

感觉你的这个设计上就错了,hibernate有自己的分页处理,没必要再转成jdbc做,如果转成jdbc的话,不同的数据库处理是不一样的,比如说oracle查询5-10条的记录是用rownum,mysql用top,mysql中用limit,都是不一样的
--------------------------------------
Query q = s.createQuery(hql);
if(argsMap!=null && argsMap.size()>0){
for(int i=0;i<argsMap.keySet().toArray().length;i++){
q.setParameter((String) argsMap.keySet().toArray()[i],argsMap.get(argsMap.keySet().toArray()[i]));
}
}
//如果传入的pageSize=0则返回全部
if (pageSize != 0) {
// System.out.println(start + "*to*" + end);
q.setFirstResult(start);
q.setMaxResults(end - start);
}
results = q.list();
这是我们项目中的分页片段,
hql = "from UserVo u";像这样就可以了

⑼ hibernate中分页查询怎么做的

Hirbernate ,它自带分页API
例如:
Query q = sess.createQuery("from XXX");
q.setFirstResult(20);设置起始行
q.setMaxResults(10);每页条数
List cats = q.list(); //得到每页的数据

⑽ hibernate+struts2分页查询的问题,永远都是第一页,为什么第一条sql语句对,第二条变样了

因为sql server 没有直接的分页功能,hibernate 采用了top的方式进行间接的分页方式,第一页top pageSize,第二页 top pageSize*2,但前pageSize条记录被丢弃了,第二页的数据是从pageSize+1开始取的.

同理,第三页的数据查询了pageSize*3条数据,前pageSize*2条记录丢弃,只要pageSize*2+1到pageSize*3之间的数据...

热点内容
c学生管理系统数据库 发布:2025-02-13 14:21:41 浏览:122
传奇添加会员脚本 发布:2025-02-13 14:20:50 浏览:205
微信开发平台源码 发布:2025-02-13 14:14:20 浏览:613
安卓大屏屏幕休眠是什么意思 发布:2025-02-13 14:13:28 浏览:464
脚本的参数设置 发布:2025-02-13 14:11:57 浏览:863
androidtexture 发布:2025-02-13 14:11:57 浏览:393
怎么取消网络密码怎么设置 发布:2025-02-13 14:11:54 浏览:426
我的世界电脑手机等价科技服务器 发布:2025-02-13 14:06:06 浏览:244
删除空行linux 发布:2025-02-13 14:04:11 浏览:992
安卓加速播放器哪个好 发布:2025-02-13 14:02:09 浏览:847