真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

總結(jié)Criteria的簡要使用概述(Hibernate5.2+)-創(chuàng)新互聯(lián)

一、Criteria概述

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、修水網(wǎng)站維護、網(wǎng)站推廣。

? Hibernate提出的面向?qū)ο蟛樵傾PI,非SQL或HQL方式。

二、Criteria使用(5.2之前版本)

? Criteria:標(biāo)準(zhǔn)查詢接口,用來執(zhí)行查詢和添加條件。

? Criterion:是Criteria的查詢條件,提供了add(Criterion criterion)方法添加查詢條件。

? Restrictions :提供了大量的靜態(tài)方法作為Criterion的條件對象。

Projection:用于描述一個投影查詢項,一個 Projection 對象就是一個投影查。

? Projections:提供了大量的靜態(tài)方法用于產(chǎn)生 Projection 投影查詢項。

ProjectionList:多個投影查詢項,是投影查詢集合。可以使用add方法來添加投影查詢項。

? Order:描述排序方式。

2、操作使用

? ①創(chuàng)建 Criteria 對象:Criteria c = session.createCriteria(Teacher.class);

? ②設(shè)置查詢條件(可選):

?????使用 Restrictions 的靜態(tài)方法可以快速生成查詢條件對象 Criterion。
?????????????Restrictions.eq :equal,等于
?????????????Restrictions.gt :great-than >大于
?????????????Restrictions.ge : great-equal >= 大于等于
?????????????Restrictions.lt :less-than< 小于
?????????????Restrictions.le : less-equal<= 小于等于
?????????????Restrictions.between: 對應(yīng)SQL的 between 子句
?????????????Restrictions.like : 對應(yīng)SQL的 like 子句
?????????????Restrictions.in :對應(yīng)SQL的 in子句
?????????????Restrictions.isNull : 判斷屬性是否為空,為空則返回 true
?????????????Restrictions.and :and 關(guān)系
?????????????Restrictions.or :or 關(guān)系

?????查詢條件對象定義好后要將查詢條件添加到 Criteria 對象中
criteria.add(查詢條件對象)

③ 設(shè)置投影查詢項(可選):? ?

?????創(chuàng)建投影查詢項:
?????????????Projections.property("屬性名"):創(chuàng)建一個投影查詢項是屬性的 Projection 對象。
?????????????Projections.avg(String propertyName):求平均值的投影查詢對象。
?????????????Projections.count(String propertyName):求屬性出現(xiàn)次數(shù)總和的投影查詢對象。
?????????????Projections.max(String propertyName):求屬性大值的投影查詢對象。
?????????????Projections.min(String propertyName):求最小值的投影查詢對象。
?????????????Projections.sum(String propertyName):求和的投影查詢對象。
?????????????Projections.聚合函數(shù)(String propertyName, ”別名”):當(dāng)要使用聚合函數(shù)的結(jié)果來排序時,可以給聚合函數(shù)的投影結(jié)果定義別名,最后通過該別名來實現(xiàn)排序。
?????????????Projections.聚合函數(shù)(String propertyName).as(”別名”):當(dāng)要使用聚合函數(shù)的結(jié)果來排序時,可以給聚合函數(shù)的投影結(jié)果定義別名,最后通過該別名來實現(xiàn)排序。
?????????????Projections.projectionList():創(chuàng)建一個投影查詢對象集合,一個集合可以保存多個投影查詢項對象。
?????????????projectionList.add(Projection對象):將投影查詢對象添加到投影查詢集合中。
?????????????projectionList.add(Projection對象, 字符串):將投影查詢對象添加到查詢集合中,并為其添加別名。
?????????????Projections.groupProperty(String propertyName):分組。

?????將投影查詢項設(shè)置 Criteria 中
?????????????criteria.setProjection(Projection對象)。

? ④排序方式(可選):

?????criteria.addOrder(Order.asc(“屬性名或者別名”)):升序
?????criteria.addOrder(Order.desc(“屬性名或者別名”)):降序

⑤ 設(shè)置分頁(可選):

?????criteria.setFirstResult(); 設(shè)置起始位置從0開始
?????criteria.setMaxResult(); 設(shè)置查詢總行數(shù)

⑥ 執(zhí)行查詢

?????criteria.list();
?????criteria.uniqueResult();

Demo:Criteria使用示例。

public class CriteriaDemo {
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		Session session = SessionUtil.openConnection();
		
		//1、查詢所有數(shù)據(jù)
		Criteria criteria = session.createCriteria(Products.class);
		Listlist0 = criteria.list();
		System.out.println(list0);
		
		//2、條件查詢:單個條件
		Criteria criteria1 = session.createCriteria(Products.class);
		Criterion lt = Restrictions.lt("p_name", "M416");
		criteria1.add(lt);
		System.out.println(criteria1.list());
		
		//3、條件查詢:多個條件之a(chǎn)nd
		Criteria criteria2 = session.createCriteria(Products.class);
		Criterion lt2 = Restrictions.lt("p_count", 2000);
		Criterion gt2 = Restrictions.gt("p_price", 2000.0);
		//創(chuàng)建and條件對象
		Criterion c = Restrictions.and(lt2, gt2);
		criteria2.add(c);
		System.out.println(criteria2.list());
		
		//4、條件查詢:多個條件之or
		Criteria criteria3 = session.createCriteria(Products.class);
		Criterion lt3 = Restrictions.lt("p_count", 2000);
		Criterion gt3 = Restrictions.gt("p_price", 2000.0);
		//創(chuàng)建and條件對象
		Criterion c1 = Restrictions.or(lt3, gt2);
		criteria3.add(c1);
		System.out.println(criteria3.list());
		
		//5、查詢所有商品的名字
		Criteria criteria4 = session.createCriteria(Products.class);
		Projection name = Projections.property("p_name");
		criteria4.setProjection(name);
		System.out.println(criteria4.list());
		
		//6、查詢數(shù)據(jù)總行數(shù)
		Criteria criteria5 = session.createCriteria(Products.class);
		CountProjection count_id = Projections.count("p_id");
		criteria5.setProjection(count_id);
		System.out.println(criteria5.uniqueResult());
		
		//7、查詢商品名稱、價格,并根據(jù)價格排序
		Criteria criteria6 = session.createCriteria(Products.class);
		Projection name1 = Projections.property("p_name");
		Projection price1 = Projections.property("p_price");
		ProjectionList projectionList = Projections.projectionList();
		projectionList.add(name1);
		projectionList.add(price1);
		criteria6.setProjection(projectionList);
		Listlist = (List)criteria6.list();
		criteria6.addOrder(Order.desc("p_price"));
		for(Object[] o: list) {
			System.out.println(o[0] + ":" + o[1]);
		}
		
		//8、根據(jù)類型分組,求每種類型的商品數(shù)量,并按照數(shù)量降序排列
		Criteria criteria7 = session.createCriteria(Products.class);
		//分組
		PropertyProjection groupProperty = Projections.groupProperty("p_typeid");
		//投影
		Projection count = Projections.count("p_id");
		ProjectionList projectionList1 = Projections.projectionList();
		projectionList1.add(groupProperty);
		//添加投影時,要給投影項取別名
		projectionList1.add(count,"count");
		
		criteria7.setProjection(projectionList1);
		//排序
		criteria7.addOrder(Order.desc("count"));
		Listlist1 = (List)criteria7.list();
		for(Object[] o: list1) {
			System.out.println(o[0]+":"+o[1]);
		}
		
		//9、分頁查詢
		Criteria criteria8=session.createCriteria(Products.class);
		criteria8.setFirstResult(1);
		criteria8.setMaxResults(2);
		System.out.println(criteria8.list());
		
		session.close();
	}
}

三、Criteria使用(5.2之后版本)

1、重要API????????

CriteriaBuilder:創(chuàng)建查詢接口的建造者類,用于創(chuàng)建查詢接口CriteriaQuery 對象、查詢條件Predicate對象、投影查詢表達式Expression對象。

CriteriaQuery:查詢接口,用于添加查詢條件,分組,排序,投影查詢。
Root:根據(jù)屬性名稱獲取字段名稱,字段名稱可以用于查詢條件和投影查詢中。(from之后,可得到相應(yīng)的綁定各個屬性對象Path,Path是繼承Expression,兩者都可表達投影。)
Predicate:條件對象。
Expression:表達式對象,用于表達投影查詢的字段,條件中的字段名稱。(select之后)

2、操作使用

? ①創(chuàng)建查詢對象:

CriteriaBuilder criteriaBuilder = EntityManagerFactory.unwrap(SessionFactory.class).
            getCurrentSession().getCriteriaBuilder();
    CriteriaQuerycriteriaQuery = criteriaBuilder.createQuery(Class c);
    Root root = criteriaQuery.from(Class c);

? ②設(shè)置查詢條件(可選):

? 創(chuàng)建查詢條件:

criteriaBuilder.equals(root.get(“字段名”), 值);	
    criteriaBuilder.and();
    criteriaBuilder.or();

? 添加查詢條件:

criteriaQuery.where();

③ 設(shè)置投影查詢(可選):

? 創(chuàng)建投影查詢項(可選):

?????創(chuàng)建字段投影查詢項:root.get(“字段名稱”)

?????創(chuàng)建聚合函數(shù)投影查詢項:criteriaBuilder.avg(root.get("age"));

添加投影查詢項:

criteriaQuery.select(投影查詢項對象);
        criteriaQuery.multiselect(投影查詢項對象1,投影查詢項對象2...);

④ 設(shè)置分組(可選):criteriaQuery.groupBy(root.get(""));

⑤ 設(shè)置排序(可選):

??????criteriaBuilder.asc(root.get(""));//升

criteriaBuilder.asc(criteriaBuilder.avg(root.get("")));//根據(jù)聚合函數(shù)升序

criteriaBuilder.desc(root.get(""));//降

⑥ 封裝Query對象:Query query = session.createQuery(criteriaQuery);

⑦ 分頁查詢(可選):? ? ? ? ? ? ? ? ? ? ? ? ?

query.setFirstResult(); 設(shè)置起始位置從0開始
        query.setMaxResult(); 設(shè)置查詢總行數(shù)

⑧ 執(zhí)行查詢:

query.getResultList();
        query.getSingleResult();

Demo:Criteria使用示例。

public class QBCQuery {
	public static void main(String[] args) {
		Session session = SessionUtil.openConnection();
		
		//1、查詢所有數(shù)據(jù)
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(Products.class);
		Rootroot = createQuery.from(Products.class);
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		System.out.println(list);
		
		//2、條件查詢:單個條件
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(Products.class);
		Rootroot = createQuery.from(Products.class);
		//創(chuàng)建條件
		Path path = root.get("p_price");
		Predicate price = builder.lt(path, 2000.0);
		createQuery.where(price);
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		System.out.println(list);
		
		//3、條件查詢:多個條件
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(Products.class);
		Rootroot = createQuery.from(Products.class);
		//創(chuàng)建條件
		Pathprice = root.get("p_price");
		Pathcount = root.get("p_count");
		Predicate pricelt = builder.lt(price, 2000.0);
		Predicate countgt = builder.gt(count, 200);
		Predicate predicate = builder.and(pricelt,countgt);
		createQuery.where(predicate);
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		System.out.println(list);
		
		//4、投影查詢:查詢單個屬性(查詢所有商品的名稱)
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(String.class);
		Rootroot = createQuery.from(Products.class);
		//創(chuàng)建查詢條件
		Expressionname = root.get("p_name");
		createQuery.select(name);
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		System.out.println(list);
		
		//5、投影查詢:查詢多個屬性(查詢所有商品的名稱和價格)
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(Object[].class);
		Rootroot = createQuery.from(Products.class);
		//創(chuàng)建查詢條件
		Expressionname = root.get("p_name");
		Expressionprice = root.get("p_price");
		createQuery.multiselect(name,price);
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		for(Object[] row: list) {
			System.out.println(row[0] + ":" + row[1]);
		}
		
		//6、投影查詢:查詢多個屬性(查詢所有商品的名稱和價格,加上條件)
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(Object[].class);
		Rootroot = createQuery.from(Products.class);
		//創(chuàng)建查詢條件
		Expressionname = root.get("p_name");
		Expressionprice = root.get("p_price");
		Expressionmax = builder.max(price);
		createQuery.multiselect(name,max);
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		for(Object[] row: list) {
			System.out.println(row[0] + ":" + row[1]);
		}
		
		//7、分組、統(tǒng)計、排序
		CriteriaBuilder builder = session.getCriteriaBuilder();
		CriteriaQuerycreateQuery = builder.createQuery(Object[].class);
		Rootroot = createQuery.from(Products.class);
		//分組
		createQuery.groupBy(root.get("p_typeid"));
		//統(tǒng)計
		Expressioncount = builder.count(root.get("p_id"));
		//條件
		Predicate gt = builder.gt(count, 3);	//統(tǒng)計數(shù)量大于3的
		createQuery.having(gt);
		PathpTypeid = root.get("p_typeid");
		createQuery.multiselect(count, pTypeid);
		//排序
		createQuery.orderBy(builder.asc(count));
		//執(zhí)行查詢
		Queryquery = session.createQuery(createQuery);
		Listlist = query.list();
		for(Object[] row: list) {
			System.out.println(row[0] + ":" + row[1]);
		}
        //8、in兩種表達方式①正常條件拼接,②in的循環(huán)匹配(新),偽代碼舉例:查詢集合為ids所有商品
        ① CriteriaBuilder builder = session.getCriteriaBuilder();
		  CriteriaQuerycreateQuery = builder.createQuery(Products.class);
          Rootroot = createQuery.from(Products.class);
          PathidPath = root.get("id");
          Predicate pre = idPath.in(ids);
          createQuery.where(pre);
          ...
        ② CriteriaBuilder builder = session.getCriteriaBuilder();
		  CriteriaQuerycreateQuery = builder.createQuery(Products.class);
          Rootroot = createQuery.from(Products.class);
          IninClause = builder.in(root.get("productIds"));//得到商品ids綁定條件
          for (Long id : ids) {
              inClause.value(id);//匹配每一個符合的id,實際in在sql的處理相當(dāng)于循環(huán)匹配。
          }
          createQuery.where(inClause);
          ...
        //9、對于判斷語句的拼接,可采用equal,and
          Predicate p1 = builder.equal(root.get("id"), id);
          builder.and(..., p1);
        //10、有的時候where后面條件根據(jù)判斷會不存在的情況,類似... where 1=1
          Predicate p1 = builder.conjunction();
          ...
	}
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站題目:總結(jié)Criteria的簡要使用概述(Hibernate5.2+)-創(chuàng)新互聯(lián)
分享鏈接:http://weahome.cn/article/csidgg.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部