一、Criteria 查询
二、SQLQuery, 本地SQL查询
三、分页查询
1、代码:
package sram.query;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
public class App_page {
public static SessionFactory sf;
static{
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试使用
.buildSessionFactory();
}
//分页查询
//注意: 必须按照所示1、2、3的顺序书写,顺序不能调换
@Test
public void all(){
Session session = sf.openSession();
session.beginTransaction();
Query q = session.createQuery("from Employee");
//1.总记录数
//这种方式也可以session.createQuery("select count(*) from Employee");
//但是hql给我提供了一个更好的方法
ScrollableResults scroll = q.scroll();//得到滚动的结果集
scroll.last();//滚动到最后一行
int totalCount = scroll.getRowNumber()+1;//得到滚动的记录数,即总记录数,但是是从0开始,所以要+1
//2.设置分页参数
q.setFirstResult(0);
q.setMaxResults(2);
//3.查询
System.out.println(q.list());
System.out.println("总记录数:"+totalCount);
session.getTransaction().commit();
session.close();
/*
Criteria查询和sql查询也支持上述的ScrollableResults对象进行分页查询
Criteria criteria = session.createCriteria(Employee.class);
session.createSQLQuery("from t_employee");
*/
}
}
2、运行结果: