HQL和Criteria
HQL和Criteria
HQL(Hibernate Query Language)
面向對象的查詢語言,與SQL不同,HQL中的對象名是區分大小寫的(除了JAVA類和屬性其他部分不區分大小寫);HQL中查的是對象而不是和表,並且支持多態;HQL主要通過Query來操作,Query的創建方式:
Queryq = session.createQuery(hql);
l from Person
l from User user whereuser.name=:name
l from User user where user.name=:nameand user.birthday < :birthday
Criteria
Criteria是一種比HQL更面向對象的查詢方式;Criteria的創建方式:
Criteriacrit = session.createCriteria(DomainClass.class);
簡單屬性條件如:criteria.add(Restrictions.eq(propertyName,value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
利用name的不同的查詢
1、 HQL
Session s=null
try{
s=HibernateUtil.getSession();
//from Useruser 給User起一個別名為user. name表示的是類中的屬性名
//fromObject 查得是所有表格中的記錄行,from User 查得是User所對應表中的所有記錄行
String queryString="from User user where user.name=:n";//查詢字符串,hibernate的查詢語言hql。類名區分大小寫
Query query=s.createQuery(queryString);//產生query對象,用來查詢
// query.setString(0, name);//下標從0開始
query.setString("n", name);//用命名參數,就不需要索引下標的位置了
//實現分頁查詢
query.setFirstResult(0);//從第0行開始
query.setMaxResults(2);//每頁最多顯示2條記錄
/*query.list();//列出所有滿足條件的結果集
query.uniqueResult();//返回的是一行的結果集*/
//如果滿足條件的不止一條記錄
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();
}
}
2、 Criteria
Session s=null;
try{
s=HibernateUtil.getSession();
Criteria c=s.createCriteria(User.class);//根據映射類型去查表
c.add(Restrictions.eq("name", name));//添加的是約束條件,user裏面的name屬性要等於參數name
// c.add(Restrictions.le("birthday", value));//生日要小於等於。。。。。。
//上面的兩句話等價於Criteria c=s.createCriteria(User.class).c.add(Restrictions.eq("name",name));
List<User> list=c.list();
for(User user:list){
System.out.println(user.getId()+":"+user.getName()+":"+user.getBirthday());
}
}finally{
if(s!=null){
s.close();
}
}
sql查得是表,HQl查得是對象,hql支持多態
HQL和Criteria