hibernate Criteria

Session session = null;
try {
	session = HibernateSessionFactory.getSession();
	session.beginTransaction();
			
	//当session.createCriteria(实体类.class) 就会产生一条select所有列from 表SQL语句,
	//查询实体类对应数据表的所有记录,然后我们就可以在这个Criteria对象上进行条件查询、
	//分页查询、多表关联查询、投影查询、子查询等一系列操作
	Criteria criteria = session.createCriteria(User.class);
	List<User> results = criteria.list();
	System.out.println(results.size());
			
	//对查询添加条件对象Criterion
	criteria = session.createCriteria(User.class);
	criteria.add(Restrictions.like("userName", "jaeson%"));
	results = criteria.list();
	System.out.println(results.size());			
	//AND或OR使用LogicalExpression限制条件
	criteria = session.createCriteria(User.class);
	Criterion zipCode = Restrictions.gt("address.zipCode", 2000);
	Criterion userName = Restrictions.like("userName","jaeson%");
	//对于多个查询条件,Restrictions提供了逻辑组合查询方法
	//and(Criterion lhs, Criterion rhs) 用于生成多个条件and关系SQL语句; 
	//or(Criterion lhs, Criterion rhs) 用于生成多个条件or关系SQL语句;
	LogicalExpression orExp = Restrictions.or(zipCode, userName);
	criteria.add( orExp );
	//分页操作 firstResult和maxResults 
	criteria.setFirstResult(0);
	criteria.setMaxResults(10);
	//排序操作 Order 
	criteria.addOrder(Order.desc("userName"));
	criteria.addOrder(Order.asc("id"));
	results = criteria.list();
	System.out.println(results.size());
			
	//多表关联操作 createAlias和createCriteria 
	//Criteria接口提供createAlias 和 createCriteria 两组方法用于完成多表关联查询。
	//createAlias(String associationPath, String alias) 采用内连接关联。
	//createAlias(String associationPath, String alias, int joinType) 可以通过joinType指定连接类型。
	//createCriteria(String associationPath) 采用内连接关联(返回新的Criteria对象)。
	//createCriteria(String associationPath, int joinType) 可以通过joinType指定关联类型(返回新的Criteria对象 )。 
			
	//方法一:使用createCriteria方法
	criteria = session.createCriteria(User.class);
	//通过User类的department属性返回新的Criteria
	Criteria criteria2 = criteria.createCriteria("department");
	criteria2.add(Restrictions.eq("deptName", "行政部"));
	results = criteria.list();
	System.out.println(results.size());
			
	//方法二:使用createAlias 方法
	//使用createAlias方法不会像createCriteria那样返回一个新的Criteria对象,alias只是对关联表进行别名设置,通过别名引用设置属性。 
	criteria = session.createCriteria(User.class);
	//进行表关联,设置User类的属性department的别名
	criteria.createAlias("department", "d");
	criteria.add(Restrictions.eq("d.deptName", "行政部"));
	results = criteria.list();
	System.out.println(results.size());
			
	//投影、分组查询 Projection 
	//在实际开发中,进行查询是:可能只需要返回表中的指定列信息(投影)或者进行统计查询(count、avg、sum、min、max),
	//Criteria接口提供setProjection(Projection projection)方法用于实现投影查询操作。 
	//org.hibernate.criterion.Projections工厂类用于返回Projection投影查询对象。
	criteria = session.createCriteria(User.class);
	//通过Projections.property指定查询哪些属性
	criteria.setProjection(Projections.projectionList()
				.add(Projections.property("id"))
				.add(Projections.property("userName")));
	List<Object []> list = criteria.list();
	System.out.println(((Object []) list.get(0))[1]);
			
	//Projections提供了分组函数的查询方法: 
	//rowCount() 查询记录总数量;
	//count(String propertyName) 统计某列数量;
	//countDistinct(String propertyName) 统计某列数量(排除重复);
	//avg(String propertyName) 统计某列平均值; 
	//sum(String propertyName) 对某列值求和;
	//max(String propertyName) 求某列最大值; 
	//min(String propertyName) 求某列最小值。
	criteria = session.createCriteria(User.class);
	criteria.setProjection(Projections.rowCount());
	Long count = (Long) criteria.uniqueResult();
	System.out.println(count);
			
	criteria = session.createCriteria(User.class);
	criteria.setProjection(Projections.projectionList()
				.add(Projections.groupProperty("department"))
				.add(Projections.count("id")));
	List<Object []> listGourp = criteria.list();
	Object [] countarr = (Object []) listGourp.get(0);
	System.out.println(countarr[1] + "=" + ((Department) countarr[0]).getDeptName());
			
	session.getTransaction().commit();
			
} catch(Exception e) {
	e.printStackTrace();  
	session.getTransaction().rollback();  
} finally {  
	HibernateSessionFactory.closeSession();  
}

  * Criteria:
  * org.hibernate.criterion.Criterion是Hibernate提供的一个面向对象查询条件接口,一个单独的查询就是Criterion接口的一个实例,
    用于限制Criteria对象的查询,在Hibernate中Criterion对象的创建通常是通过Restrictions 工厂类完成的。
    org.hibernate.criterion.Order用于排序操作, Criteria 接口提供addOrder(Order order)用于生成排序SQL。


  * Restrictions 运算符 含义:
    =      Restrictions.eq() 等于 
    <>    Restrictions.not(Exprission.eq()) 不等于 
    >      Restrictions.gt() 大于 
    >=    Restrictions.ge() 大于等于
    <      Restrictions.lt() 小于 
    <=    Restrictions.le() 小于等于 
    is null           Restrictions.isnull() 等于空值 
    is not null     Restrictions.isNotNull() 非空值 
    like    Restrictions.like() 字符串模式匹配 
    and   Restrictions.and() 逻辑与
    and   Restrictions.conjunction() 逻辑与 
    or      Restrictions.or() 逻辑或 
    or      Restrictions.disjunction() 逻辑或 
    not    Restrictions.not() 逻辑非 
    in(列表)       Restrictions.in() 等于列表中的某一个值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值