QBC查询及语法

QBC查询及语法

 

 

注意:

1 .  Hibernate Example 查询不支持主键查询。如果一个po实例带有主键,不要用Example,Example的多条件组合查询还是比较方便,可以省去判断空值的情况。但是如果是要进行进行较复杂的or 或者 and 或者like 这样的查询,Example不方便。建议用QBC查询

2 .  使用  Hibernate Example   尽量不要使用Integer。

 

 

排除空串

Expression.isNotNull("sequence")

 //使用isNull方式查询出所有sequence属性有值的记录

Expression.isEmptyNull("sequence") 

// 使用isEmpty / isNotEmpty方式用来判断sequence对象中的Collection类型的属性是否为空

 

 

 

QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。

在Hibernate应用中使用QBC查询通常经过3个步骤 
  (1)使用Session实例的createCriteria()方法创建Criteria对象 
  (2)使用工具类Restrictions的相关方法为Criteria对象设置查询对象 
  (3)使用Criteria对象的list()方法执行查询,返回查询结果

         Restrictions类的常用方法

Restrictions.eq(String propertyName,Object value) 
等于 
Restrictions.allEq(Map propertyNameValues) 
使用Map key/value进行多个等于的比对 
Restrictions.gt(String propertyName, Object value) 
大于 >    (gt----->greater than) 
Restrictions.ge(String propertyName, Object value) 
大于等于 >=    (ge----->greater equal) 
Restrictions.It(String propertyName, Object value) 
小于< (It---->less than) 
Restrictions.Le(String propertyName, Object value) 
小于等于<= (le---->less equal) 
Restrictions.between(String propertyName, Object lo, Object hi) 
对应SQL语句的Between子句 
Restrictions.like(String propertyName, Object value) 
对应SQL语句的LIKE子句 
Restrictions.in(String propertyName, Collection value) 
对应SQL语句的in子句 
Restrictions.and(Criterion lhs, Criterion rhs) 
And关系 
Restrictions.or(Criterion lhs, Criterion rhs) 
Or关系 
Restrictions.sqlRestriction(String sql,Object[] values,Type[] types) 
SQL限定查询

          工具类Order提供设置排序方式 
Order.asc(String propertyName) 
升序排序 
Order.desc(String propertyName) 
降序排序

         工具类Projections提供对查询结果进行统计与分组操作 
Porjections.avg(String propertyName) 
求某属性的平均值 
Projections.count(String propertyName) 
统计某属性的数量 
Projections.countDistinct(String propertyName) 
统计某属性的不同值的数量 
Projections.groupProperty(String propertyName) 
指定一组属性值 
Projections.max(String propertyName) 
某属性的最大值 
Projections.min(String propertyName) 
某属性的最小值 
Projections.projectionList() 
创建一个新的projectionList对象 
Projections.rowCount() 
查询结果集中记录的条数 
Projections.sum(String propertyName) 
返回某属性值的合计

QBE查询

   QBE查询就是检索与指定样本对象具有相同属性值的对象。因此QBE查询的关键就是样本对象的创建,样本对象中的所有非空属性均将作为查询条件。QBE查询的功能子集,虽然QBE没有QBC功能大,但是有些场合QBE使用起来更为方便。

        工具类Example为Criteria对象指定样本对象作为查询条件


Java代码 
Session session = HibernateSessionFactory.getSessionFactory().openSession();    
Transaction ts = session.beginTransaction();    
Customer c = new Customer();    
c.setCname("Hibernate");    
Criteria criteria = session.createCriteria(Customer.class);    
Criteria.add(Example.create(c));    
Iterator it = criteria.list().iterator();    
ts.commit();    
HibernateSessionFactory.closeSession();   
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction ts = session.beginTransaction();
Customer c = new Customer();
c.setCname("Hibernate");
Criteria criteria = session.createCriteria(Customer.class);
Criteria.add(Example.create(c));
Iterator it = criteria.list().iterator();
ts.commit();
HibernateSessionFactory.closeSession();

QBC分页查询 
   Criteria为我们提供了两个有用的方法:setFirstResult(int firstResult)和setMaxResults(int maxResults). 
setFirstResult(int firstResult)方法用于指定从哪一个对象开始检索(序号从0开始),默认为第一个对象(序号为0);setMaxResults(int maxResults)方法用于指定一次最多检索出的对象数目,默认为所有对象。


Java代码 
Session session = HibernateSessionFactory.getSessionFactory().openSession();    
Transaction ts = null;    
Criteria criteria = session.createCriteria(Order.class);    
int pageSize = 15;    
int pageNo = 1;    
criteria.setFirstResult((pageNo-1)*pageSize);    
criteria.setMaxResults(pageSize);    
Iterator it = criteria.list().iterator();    
ts.commit();    
HibernateSessionFactory.closeSession();   
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction ts = null;
Criteria criteria = session.createCriteria(Order.class);
int pageSize = 15;
int pageNo = 1;
criteria.setFirstResult((pageNo-1)*pageSize);
criteria.setMaxResults(pageSize);
Iterator it = criteria.list().iterator();
ts.commit();
HibernateSessionFactory.closeSession();

QBC复合查询 
   复合查询就是在原有的查询基础上再进行查询。例如在顾客对定单的一对多关系中,在查询出所有的顾客对象后,希望在查询定单中money大于1000的定单对象。

Java代码 
Session session = HibernateSessionFactory.getSessionFactory().openSession();    
Transaction ts = session.beginTransaction();    
Criteria cuscriteria = session.createCriteria(Customer.class);    
Criteria ordCriteria = cusCriteria.createCriteria("orders");    
ordCriteria.add(Restrictions.gt("money", new Double(1000)));    
Iterator it = cusCriteria.list().iterator();    
ts.commit();    
HibernateSessionFactory.closeSession();   
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction ts = session.beginTransaction();
Criteria cuscriteria = session.createCriteria(Customer.class);
Criteria ordCriteria = cusCriteria.createCriteria("orders");
ordCriteria.add(Restrictions.gt("money", new Double(1000)));
Iterator it = cusCriteria.list().iterator();
ts.commit();
HibernateSessionFactory.closeSession();


QBC离线查询 
   离线查询又叫DetachedCriteria查询,它可以在Session之外进行构造,只有在需要执行查询时才与Session绑定。



转自 http://blog.csdn.net/hi_jess/archive/2009/10/08/4641237.aspx

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值