Hibernate的检索方式
1 导航对象图检索方式
根据已经加载的对象,导航到其他对象,例如:对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以导航到所有相关联的Order对象。
2 OID检索方式
按照对象的OID来检索对象。Session的get()和load()方法提供了这种功能。
3 HQL检索方式(跨平台检索方式)
Query实例包装了一个HQL(Hibernate Query Language)查询语句,HQL和SQL查询语句有些相似,便HQL查询语句是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。
在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。简单查询用HQL检索方式。主要是用Session.CreateQuery()方法进行查询
(1)属性查询
Session session=HibernateSessionFactory
.getConfiguration()
.buildSessionFactory()
.openSession();
//查询Customers类中的所有对象
//String hql="from Customers";//查出的对象用
String hql="select c.id,c.name,c.age from Customers c";
Query query=session.createQuery(hql);
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext()){
Object[] arr=(Object[])it.next();
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
(2)参数查询
//查询年纪大于25岁
String hql="select c.id,c.name,c.age from Customers c where c.age>=?";
Query query=session.createQuery(hql);
query.setInteger(0, new Integer(25));
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext()){
Object[] arr=(Object[])it.next();
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
(3)关联查询
//查询一个客户有几张订单
String hql="select c.id,c.name,c.age,o.orderNumber from Customers c ,Orders o where c.id=o.customers";
Query query=session.createQuery(hql);
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext()){
Object[] arr=(Object[])it.next();
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
(4)分页查询
/**
* 分页查询
* @param sql
* 分页用sql查询语句
* 类似:select c.id,c.name,c.age from Customers c order by c.id desc
* @param pageNo
* 要查询第几页
* @param pageSize
* 每一页的大小
* @return
* 返回List结果集
*/
protected List select(String hql,int pageNo,int pageSize){
List results=null;
try{
Query query=getSession().createQuery(hql);
int firstResultIndex=pageSize*(pageNo-1);
query.setFirstResult(firstResultIndex);
query.setMaxResults(pageSize);
results=query.list();
}catch(RuntimeException ex){
throw ex;
}finally{
closeSession();
}
return results;
}