Hibernate中DetachedCriteria的使用

Criteria對SQL進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢User表格中的所有資料:

Criteriacriteria=session.createCriteria(User.class);

//查詢user所有欄位

Listusers=criteria.list();

Iteratoriterator=users.iterator();

System.out.println("id/tname/age");

while(iterator.hasNext()){

Useruser=(User)iterator.next();

System.out.println(user.getId()+

"/t"+user.getName()+

"/"+user.getAge());

}

Hibernate實際上使用以下的SQL來查詢資料庫:

selectthis_.idasid0_,this_.nameasname0_0_,this_.ageasage0_0_fromuserthis_

Criteria實際上只是個容器,如果想要設定查詢條件,則要使用add()方法加入Restrictions的條件限制,例如查詢age大於20且小於40的資料:

Criteriacriteria=session.createCriteria(User.class);

criteria.add(Restrictions.gt("age",newInteger(20)));

criteria.add(Restrictions.lt("age",newInteger(40)));

Listusers=criteria.list();

您也可以使用邏輯組合來進行查詢,例如結合age等於(eq)20或(or)age為空(isNull)的條件:

Criteriacriteria=session.createCriteria(User.class);

criteria.add(Restrictions.or(

Restrictions.eq("age",newInteger(20)),

Restrictions.isNull("age")

));

Listusers=criteria.list();

也可以使用sqlRestriction()方法來提供SQL語法作限定查詢,例如查詢name以cater開頭的資料:

Criteriacriteria=session.createCriteria(User.class);

criteria.add(Restrictions.sqlRestriction("{alias}.nameLIKE(?)","cater%",Hibernate.STRING));

Listusers=criteria.list();

其中alias將被替換為與User類別相關的名稱,而?將被替換為cater%,也就是第二個參數所提供的值,在SQL撰寫時,不必再寫WHERE,如果有多個查詢條件,例如BETWEEN子句的查詢,則可以如下:

Criteriacriteria=session.createCriteria(User.class);

Integer[]ages={newInteger(20),newInteger(40)};

Type[]types={Hibernate.INTEGER,Hibernate.INTEGER};

criteria.add(Restrictions.sqlRestriction("{alias}.ageBETWEEN(?)AND(?)",ages,types));

Listusers=criteria.list();

Restrictions的幾個常用限定查詢方法如下表所示:

方法說明

Restrictions.eq等於

Restrictions.allEq使用Map,使用key/value進行多個等於的比對

Restrictions.gt大於>

Restrictions.ge大於等於>=

Restrictions.lt小於<

Restrictions.le小於等於<=

Restrictions.between對應SQL的BETWEEN子句

Restrictions.like對應SQL的LIKE子句

Restrictions.in對應SQL的in子句

Restrictions.andand關係

Restrictions.oror關係

Restrictions.sqlRestrictionSQL限定查詢

==============

HibernateCriteria关联查询

...http://hkaimin.blog.163.com/blog/static/19969705220126933749502/

相关推荐