01.环境搭建

02.基本查询

1.方法说明

方法

说明

Restrictions.eq

Restrictions.allEq

利用Map来进行多个等于的限制

Restrictions.gt

Restrictions.ge

>=

Restrictions.lt

Restrictions.le

<=

Restrictions.between

BETWEEN

Restrictions.like

LIKE

Restrictions.in

in

Restrictions.and

and

Restrictions.or

or

Restrictions.sqlRestriction

用SQL限定查询

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,QBC常用限定方法

Restrictions.eq –> equal,等于.

Restrictions.allEq –> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq的效果

Restrictions.gt –> great-than > 大于

Restrictions.ge –> great-equal >= 大于等于

Restrictions.lt –> less-than, < 小于

Restrictions.le –> less-equal <= 小于等于

Restrictions.between –> 对应SQL的between子句

Restrictions.like –> 对应SQL的LIKE子句

Restrictions.in –> 对应SQL的in子句

Restrictions.and –> and 关系

Restrictions.or –> or 关系

Restrictions.isNull –> 判断属性是否为空,为空则返回true

Restrictions.isNotNull –> 与isNull相反

Restrictions.sqlRestriction –> SQL限定的查询

Order.asc –> 根据传入的字段进行升序排序

Order.desc –> 根据传入的字段进行降序排序

MatchMode.EXACT –> 字符串精确匹配.相当于”like ‘value'”

MatchMode.ANYWHERE –> 字符串在中间匹配.相当于”like ‘%value%'”

MatchMode.START –> 字符串在最前面的位置.相当于”like ‘value%'”

MatchMode.END –> 字符串在最后面的位置.相当于”like ‘%value'”

 

01.基本操作

package com.gordon.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import com.gordon.domain.Book;
import com.gordon.utils.HibernateUtil;

/**
 * QBC查询
 * @author Administrator
 *
 */
public class TestQBCDemo1 {
	/**
	 * 基本查询
	 */
	@Test
	public void run1() {
		Session session = HibernateUtil.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		
		// 穿件criteria查询接口
		Criteria query = session.createCriteria(Book.class);
		
		query.addOrder(Order.asc("price"));
		query.add(Restrictions.le("price", 40.00));
		
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book.getName());
		}
		
		transaction.commit();
	}
}

02.分组查询

/**
 * 分组查询
	Hibernate: 
	    select
	        this_.publisher_id as y0_,
	        count(*) as y1_,
	        sum(this_.price) as y2_ 
	    from
	        t_book this_ 
	    group by
	        this_.publisher_id
	Hibernate: 
	    select
	        publisher0_.id as id1_1_0_,
	        publisher0_.name as name2_1_0_ 
	    from
	        t_publisher publisher0_ 
	    where
	        publisher0_.id=?
	出版社:电子工业出版社, 图书数量:3, 总价:155.0
	Hibernate: 
	    select
	        publisher0_.id as id1_1_0_,
	        publisher0_.name as name2_1_0_ 
	    from
	        t_publisher publisher0_ 
	    where
	        publisher0_.id=?
	出版社:北京大学出版社, 图书数量:2, 总价:67.84
	Hibernate: 
	    select
	        publisher0_.id as id1_1_0_,
	        publisher0_.name as name2_1_0_ 
	    from
	        t_publisher publisher0_ 
	    where
	        publisher0_.id=?
	出版社:人民邮电出版社, 图书数量:2, 总价:107.2
 */
@Test
public void run2() {
	Session session = HibernateUtil.getCurrentSession();
	Transaction transaction = session.beginTransaction();
	
	// 穿件criteria查询接口
	Criteria query = session.createCriteria(Book.class);
	
	ProjectionList pList = Projections.projectionList();
	pList.add(Projections.groupProperty("publisher"));
	pList.add(Projections.rowCount());
	pList.add(Projections.sum("price"));
	
	query.setProjection(pList);
	
	Publisher publisher = null;
	Long count = null;
	Double sum = null;
	List<Object[]> list = query.list();
	for (Object[] obj : list) {
		publisher = (Publisher) obj[0];
		count = (Long) obj[1];
		sum = (Double) obj[2];
		
		System.out.println("出版社:" + publisher.getName() + ", 图书数量:" + count + ", 总价:" + sum);
	}
	
	transaction.commit();
}

03.聚合函数

/**
 * 聚合函数
	Hibernate: 
	    select
	        sum(this_.price) as y0_,
	        min(this_.price) as y1_,
	        max(this_.price) as y2_,
	        avg(this_.price) as y3_ 
	    from
	        t_book this_
	[330.04, 31.0, 70.0, 47.14857142857143]
 */
@Test
public void run3() {
	Session session = HibernateUtil.getCurrentSession();
	Transaction transaction = session.beginTransaction();
	
	Criteria criteria = session.createCriteria(Book.class);
	
	ProjectionList projectionList = Projections.projectionList();
	projectionList.add(Projections.sum("price"));
	projectionList.add(Projections.min("price"));
	projectionList.add(Projections.max("price"));
	projectionList.add(Projections.avg("price"));
	
	criteria.setProjection(projectionList);
	
	List<Object[]> list = criteria.list();
	for (Object[] objects : list) {
		System.out.println(Arrays.toString(objects));
	}
	
	transaction.commit();
}