当前位置:首页 » 编程语言 » hibernate分页sql语句
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hibernate分页sql语句

发布时间: 2022-08-24 17:39:55

㈠ 使用hibernate时报错 跟sql语句有关

你分页写错了,mysql中是用limit来分页的,select * from table limit start,pageNum

说明:
start:取数据的定位点 [开始是从0开始]
pageNum:每次取多少

比如:start=0|ageNum=5 ,也就是select * from table limit 0,5
那么就是说,取1-6 条数据,

㈡ HIBERNATE中分页查询的方法问题

query.setFirstResult(currentPage * 15);//这是说从第几条开始,一般用参数来计算更灵活

query.setMaxResults(15);//这一页显示最大条

想分页的话,这两个方法都要传参数来控制,我的代码
/** pageSize:最大数 pageNo:最小数 */
public List DEPT_QUERY(final int pageSize,final int pageNo)//带分页
{
list=super.getHibernateTemplate().executeFind(
new HibernateCallback(){
public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Query q=s.createQuery(DEPT_QUERY_SQL);//接受SQL语句,并赋给q
q.setFirstResult(pageSize*(pageNo-1));
q.setMaxResults(pageSize);
return q.list();//返回当前的q.list
}
}
);
return list;//返回list,在业务层调用的时候取出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之间的数据...

㈣ Hibernate 实现分页查询原理分析

楼主你没说清楚呢 无论是什么ORM原理都是一样使用jdbc发送的sql语句 分页也是一样的 只不过Hibernate 把这一切都封装的非常美丽 还有分页方法也有好多种呢 你说的是那种呢
还有懒加载有点不一样哦 楼主 你需要说明白你的具体做法 才好解释呢

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

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

㈥ 用Hibernate给MYSQL分页的“真”与“假”

你说的有点片面,你用到limit只是mysql会用到,如果是oracle或者sql server那么sql语句就不一样了,使用hibernate或者ibatis的原因在于它是持久层对象化框架,他可以自动适应数据库,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中纯sql语句查询,当分页的时候会第二页以后会多出一列行号(包含第二页)

hibernate 分页查询的时候会将你的查询语句结果作为结果集然后在此之上查询*
select * from (***********) where rownum<30(←这是第一页每页三十个)
select * from
(
select * from (***********) where rownum<60
)
where rownum_>30(←这是第二页每页三十个)
所以多出来一列 具体解决方式....... 我也不太清楚我也碰到了这个问题 原因找到了 我正在想办法处理