一、QBC检索步骤
QBC检索步骤:
1.调用Session的createCriteria()方法创建一个Criteria对象。
2.设定查询条件。Expression类提供了一系列用于设定查询条件的静态方法,
这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
Criteria的add()方法用于加入查询条件。
3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
List集合中存放了符合查询条件的持久化对象。
-
比较运算符
- HQL运算符 QBC运算符 含义
- = 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() 等于列表中的某一个值
- ont in(列表) Restrictions.not(Restrictions.in())不等于列表中任意一个值
- between x and y Restrictions.between() 闭区间xy中的任意值
- not between x and y Restrictions.not(Restrictions..between()) 小于值X或者大于值y
离线(detached)查询和子查询
DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来执行它。
DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
.add( Property.forName("sex").eq(‘F‘) );
Session session = ....;
Transaction txn = session.beginTransaction();
List results = query.getExecutableCriteria(session).setMaxResults(100).list();
txn.commit();
session.close();
DetachedCriteria也可以用以表示子查询。条件实例包含子查询可以通过 Subqueries或者Property获得。
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight").avg() );
session.createCriteria(Cat.class)
.add( Property.forName("weight).gt(avgWeight) )
.list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight") );
session.createCriteria(Cat.class)
.add( Subqueries.geAll("weight", weights) )
.list();
*************************************************\
1. 创建一个Criteria 实例
org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2. 限制结果集内容
一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。
org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") ) 相当于=》select * from car where name like ‘Fritz%‘
.add( Restrictions.between("weight", minWeight, maxWeight) )
.list();
约束可以按逻辑分组。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
Restrictions.eq( "age", new Integer(0) ),
Restrictions.isNull("age")
) )
.list();
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
.add( Restrictions.disjunction()
.add( Restrictions.isNull("age") )
.add( Restrictions.eq("age", new Integer(0) ) )
.add( Restrictions.eq("age", new Integer(1) ) )
.add( Restrictions.eq("age", new Integer(2) ) )
) )
.list();
************************************************
可以使用注入sessionFactory,继承HibernateDaoSupport,获得hibernate模版进行相关操作
二、以分页查询为例
业务层 DetachedCriteric criteria=DetachedCriteric.forclass(Cat.class); //=>select *from cat; 添加条件约束 criteria.add(Restirctions.eq("flag","0")); //select *from cat where flag=‘0‘; 1、查询总记录数 Long total= findCoundByDetachedCriteria(criteria); 2、查询相关信息 List<Cat> catinfo = findByCriteria(criteria); 持久层 (可作为持久层的模版一直使用) 查询总记录数 public Long findCoundByDetachedCriteria(DetachedCriteria criteria) { //分页查询 select * from cat public List<Cat> findByCriteria(DetachedCriteria criteria, |