1. 程式人生 > >HQL和Criteria

HQL和Criteria

util 操作 需要 unique lis where birt text val

HQLCriteria

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