Hibernate的HQL和Criteria接口
一.HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:
Queryq = session.createQuery(hql);
l from Person
l from User user where user.name=:name
l from User user where user.name=:name and user.birthday <:birthday
二.Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:
Criteriacrit = session.createCriteria(DomainClass.class);
简单属性条件如:criteria.add(Restrictions.eq(propertyName,value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
实例讲解:
package com.hbsi.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.hbsi.domain.User;
import com.hbsi.hibernate.utils.HibernateUtil;
public class QueryTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
query1("Tom");
}
public static void query1(String name){
Session s=null;
try{
s=HibernateUtil.getSession();
String queryString="from User user where user.name=:n";//hibernate的查询语言
Query query=s.createQuery(queryString);
query.setString("n",name);
query.setFirstResult(0);
query.setMaxResults(2);
List<User> list=query.list();
for(User u:list){
System.out.println(u.getId()+"::"+u.getName());
}
//明确的知道就一行记录,是唯一的
//Useruser=(User) query.uniqueResult();
//System.out.println(user.getId()+":"+user.getName());
}finally{
if(s!=null){
s.close();
}
}
//分页
}
}