hibernate中criteria的用法

来源:互联网 发布:wwe2k15优化补丁 编辑:程序博客网 时间:2024/06/05 00:43

 

一个简单例子:

Java代码  

1. @SuppressWarnings("unchecked")  

2. public void searchByPropertys() {  

3.     Session session = this.getSession();  

4.     Criteria crit = session.createCriteria(Conft.class);  

5.     List<Conft> list = crit.list();  

6.     for(Conft c : list){  

7.         System.out.println(c.getId());  

8.     }  

9. }  

 

标准查询API最终仍然翻译为SQL交由数据库处理,返回java.util.List对象

 

怎么增加条件呢?请看如下代码:

Java代码  

1. public void searchByPropertys() {  

2.     Session session = this.getSession();  

3.     Criteria crit = session.createCriteria(Conft.class);      

4.     crit.add(Restrictions.eq("id"2)); // =  

5.     crit.add(Restrictions.ne("id"2)); // !=  

6.     crit.add(Restrictions.lt("id"2)); // <  

7.     crit.add(Restrictions.gt("id"2)); // >  

8.     crit.add(Restrictions.le("id"2)); // <=  

9.     crit.add(Restrictions.ge("id"2)); // >=  

10.    crit.add(Restrictions.in("id"new String[]{"2"})); // in  

11.    crit.add(Restrictions.like("id""%2%")); // like  

12.    crit.add(Restrictions.like("id""2",MatchMode.ANYWHERE)); // %x%  

13.    crit.add(Restrictions.like("id""2",MatchMode.START)); // x%  

14.    crit.add(Restrictions.like("id""2",MatchMode.END)); // %x  

15.    crit.add(Restrictions.like("id""2",MatchMode.EXACT)); // x      

16.    List<Conft> list = crit.list();  

17.    for(Conft c : list){  

18.        System.out.println(c.getId());  

19.    }  

20.}  

 

代码后面写出了增加条件的方式和意思。

 

如果有and或者是or的关系的话,可以使用Conjunction(AND)Disjunction(OR)

下面是一个使用示例:

Java代码  

1. public void searchByPropertys() {  

2.     Session session = this.getSession();  

3.     Criteria crit = session.createCriteria(Conft.class);  

4.     // 创建条件  

5.     Criterion a = Restrictions.gt("id"2); // >  

6.     Criterion b = Restrictions.lt("id"2); // <  

7.     Criterion c = Restrictions.like("id""2",MatchMode.ANYWHERE);  

8.     // and 关系  

9.     Conjunction conjunction = Restrictions.conjunction();  

10.    conjunction.add(a);  

11.    conjunction.add(b);  

12.    // or 关系  

13.    Disjunction disjunction = Restrictions.disjunction();  

14.    disjunction.add(conjunction);  

15.    disjunction.add(c);   

16.    // 增加查询条件  

17.    crit.add(disjunction);    

18.    List<Conft> list = crit.list();  

19.    for(Conft conft : list){  

20.        System.out.println(conft.getId());  

21.    }  

22.}  

 

abAND关系,而ab合起来作为条件后和cOR关系!

如果看他的SQL的话,是这样的,有助于理解:

Java代码  

1. (where (a>? and b<?) or c like ?)  

 

除此之外还可以使用sqlRestriction方法直接拼接SQL

Java代码  

1. public User getUserById(int pk){  

2.     Session session = this.getSession();  

3.     Criteria crit = session.createCriteria(User.class);  

4.     crit.add(Restrictions.sqlRestriction(" {alias}.id=2 "));  

5.     List<User> list = crit.list();  

6.     return (User)list.get(0);  

7. }  

 

注意{alias}是表的名称,这个不用修改,Hibernate在生成SQL时会自动替换!

在源码中可以看到:

Java代码  

1. public static Criterion sqlRestriction(String sql, Object values[], Type types[])  

2. {  

3.     return new SQLCriterion(sql, values, types);  

4. }  

5. public static Criterion sqlRestriction(String sql, Object value, Type type)  

6. {  

7.     return new SQLCriterion(sql, new Object[] {  

8.         value  

9.     }, new Type[] {  

10.        type  

11.    });  

12.}  

13.public static Criterion sqlRestriction(String sql)  

14.{  

15.    return new SQLCriterion(sql, ArrayHelper.EMPTY_OBJECT_ARRAY, ArrayHelper.EMPTY_TYPE_ARRAY);  

16.}  

 

也就是说这个方法有三个调用方式,直接写SQL,如果你的SQL中有作为占位符,那么可设置后面两个参数,第二个参数对应,第三个是参数字段的类型!

 

 

0 0
原创粉丝点击