1. 程式人生 > >QBC查詢

QBC查詢

新的 篩選 進行 brush 是否為空 允許 java cti .sql

1、基本語法

 

session.beginTransaction();
Criteria criteria = session.createCriteria(Person.class);
SimpleExpression gt = Restrictions.eq("name","張三");
criteria.add(gt);
List<Person> list = criteria.list();
A、 Criteria setFirstResult(int firstResult):設置查詢返回的第一行記錄(索引從0開始); B、 Criteria setMaxResult(int maxResult):設置查詢返回的記錄數; C、 Criteria add(Criterion criterion):增加查詢條件 D、 Criteria addOrder(Order order):增加排序規則,例如addOrder(Order.desc("type")); E、 static eq | ne | gt | ge | lt | le(String propertyName,Object value),判斷指定屬性值是否等於,不等於,大於,大於等於,小於,小於等於指定值 F、 static Criterion between(String propertyName,Object lo,Object hi)判斷屬性值在某個值範圍之內 G、 static Criterion like(String propertyName,Object value),判斷屬性值匹配某個字符串,不區分大小寫,條件字符串要不是完整的字符串去匹配,要不采用%通配符進行匹配 H、 static Criterion ilike(String propertyName,String value,MatchMode matchMode),判斷屬性值匹配某個字段,不區分大小寫,模式是以判斷以某個字符串開頭或者結尾等,這個匹配字符串可以是整個值的字符串,也可以是其中的一部分,也可以使用%通配符.
      • MatchMode.START:字符串在最前面的位置.相當於"like ‘key%‘"
      • MatchMode.END:字符串在最後面的位置.相當於"like ‘%key‘"
      • MatchMode.ANYWHERE:字符串在中間匹配.相當於"like ‘%key%‘"
      • MatchMode.EXACT:字符串精確匹配.相當於"like ‘key‘
J、 static Criterion in(String propertyName,Collection values)判斷屬性值在在某個集合內 K、 static Criterion in(String propertyName,Object[] values)判斷屬性值是數組元素的其中之一 L、 static Criterion isNull(String propertyName) 判斷屬性值是否為空 M、 static Criterion sqlRestriction(String sql)直接使用sql語句作為篩選條件,例如:.add(Restrictions.sqlRestriction("type > 15")) N、 static Criterion not(Criterion expression) 對Criterion求反,兩個條件進行嵌套,例如.add(Restrictions.not(Restrictions.eq("name", "cname"))) 2、關聯與動態關聯 1>Criteria createCriteria(String associationPath):使用默認的連接方式進行關聯 2>Criteria createCriteria(String associationPath,JoinType joinType):以JoinType指定的連接方式進行關聯;支持INNER_JOIN、LEFT_OUTER_JOIN、RIGHT_OUTER_JOIN、FULL_JOIN等枚舉值; 3>Criteria createCriteria(String associationPath,String alias):該方法的功能與第一個方法的功能基本相似,只是該方法允許為關聯實體指定別名; 4>Criteria createCriteria(String associationPath,String alias,JoinType joinType):該方法的功能與第二個方法的功能基本相似,只是該方法允許為關聯實體指定別名; 5>Criteria createCriteria(String associationPath,String alias,JoinType joinType,Criterion withClause):該方法的功能最強大,該方法既可為關聯實體指定別名,也可指定連接類型,還可以通過withClause指定自定義的連接條件---這個可用於實現非等值連接; createAlias()方法並不是創建一個新的Criteria實例,他只是給關聯實體(包括集合裏包含的關聯實體)起一個別名,讓後面的過濾條件可根據該關聯實體進行篩選;
Criteria criteria = session.createCriteria(Student.class,"s");
criteria.add(Restrictions.eq("id",1));
List list = criteria.createCriteria("room","r",JoinType.INNER_JOIN).list();
for (Object object : list){
          Student student=(Student)object;
           System.out.println(student.getName());
           System.out.println(student.getId());
           ClassRoom room = student.getRoom();
           System.out.println(room.getId());
           System.out.println(room.getName());
   }

  

3、投影、聚合和分組 Hibernate的條件過濾中使用Projection代表投影運算,Projection是一個接口,而Projections作為Projection的工廠,負責生成Projection對象; 一旦產生了Projection對象之後,就可以通過Criteria提供的setProjection(Projection projection)方法來進行投影運算。 1>AggregateProjection avg(String propertyname):計算特定屬性的平均值,類似於avg函數; 2>CountProjection count(String propertyname):統計查詢結果在某列上的記錄條數,類似於count(column)函數; 3>CountProjection countDistinct(String propertyname):統計查詢結果在某列上不重復的記錄條數,類似於count(distinct column)函數; 4>PropertyProjection groupProperty(String propertyname):將查詢結果按某列上的值進行分組,類似於添加group by子句; 5>AggregateProjection max(String propertyname):統計查詢結果在某列上的最大值,類似於max函數; 6>AggregateProjection min(String propertyname):統計查詢結果在某列上的最小值,類似於min函數; 7>Projection rowCount():統計查詢結果的記錄條數,類似於count(*)的功能; 8>AggregateProjection sum(String propertyname):統計查詢結果在某列上的總和,類似於sum函數;
 //使用createCriteria開始條件查詢  
List list = sess.createCriteria(Enrolment.class)  
                      .createAlias("student", "s")  
                      .setProjection(Projections.projectionList()  
                         //統計記錄條數  
                       .add(Projections.rowCount())  
                          //統計選擇該課程裏最大的學生姓名  
                        .add(Projections.max("s.name"))  
                         //按照course進行分組  
                        .add(Projections.groupProperty("course")))  
                         .list();  

  

QBC查詢