qbchibernate.完整用法

上传人:自*** 文档编号:79726084 上传时间:2019-02-17 格式:DOC 页数:23 大小:143.80KB
返回 下载 相关 举报
qbchibernate.完整用法_第1页
第1页 / 共23页
qbchibernate.完整用法_第2页
第2页 / 共23页
qbchibernate.完整用法_第3页
第3页 / 共23页
qbchibernate.完整用法_第4页
第4页 / 共23页
qbchibernate.完整用法_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《qbchibernate.完整用法》由会员分享,可在线阅读,更多相关《qbchibernate.完整用法(23页珍藏版)》请在金锄头文库上搜索。

1、QBC(Query By Criteria) API提供了检索对象的另一种方式,它主要有Criteria接口、Criterion接口和Expresson类组成,它支持在运行时动态生成查询语句。 Hibernate中共提供了三种检索方式:HQL(Hibernate Query Language)、QBC、QBE(Query By Example)。QBC检索步骤QBC检索步骤: 1.调用Session的createCriteria()方法创建一个Criteria对象。 2.设定查询条件。Expression类提供了一系列用于设定查询条件的静态方法, 这些静态方法都返回Criterion实例,每个

2、Criterion实例代表一个查询条件。 Criteria的add()方法用于加入查询条件。 3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在 List集合中存放了符合查询条件的持久化对象。Criteria的完整用法例子QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s); /s是一个Student对象list cri.list(); 实质:创建一个模版,比如我有一个表serial有一个 giftor

3、toy字段,我设置serial.setgifttoy(2), 则这个表中的所有的giftortoy为2的数据都会出来2: QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成session = this.getSession(); Criteria cri = session.createCriteria(JdItemSerialnumber.class); Criterion cron = Restrictions.like(customer,name); cri.add(cron); list = cri.li

4、st(); = 比较运算符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

5、.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.

6、not(Restrictions.between() 小于值X或者大于值y 3: HQL String hql = select s.name ,avg(s.age) from Student s group by s.name; Query query = session.createQuery(hql); list = query.list(); . 4: 本地SQL查询session = sessionFactory.openSession(); tran = session.beginTransaction(); SQLQuery sq = session.createSQLQuery

7、(sql); sq.addEntity(Student.class); list = sq.list(); mit(); 16.1. 创建一个Criteria 实例org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();16.2. 限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例

8、。org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。List cats = sess.createCriteria(Cat.class).add( Restrictions.like(name, Fritz%) ).add( Restrictions.between(weight, minWeight, maxWeight) ).list();约束可以按逻辑分组。List cats = sess.createCriteria(Cat.class).add( Restrictions.like(name, Fritz%

9、) ).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

10、(0) ) ).add( Restrictions.eq(age, new Integer(1) ) ).add( Restrictions.eq(age, new Integer(2) ) ) ).list();Hibernate提供了相当多的内置criterion类型(Restrictions 子类), 但是尤其有用的是可以允许你直接使用SQL。List cats = sess.createCriteria(Cat.class).add( Restrictions.sql(lower(alias.name) like lower(?), Fritz%, Hibernate.STRING)

11、).list();alias占位符应当被替换为被查询实体的列别名。Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个Property。Property age = Property.forName(age);List cats = sess.createCriteria(Cat.class).add( Restrictions.disjunction().add( age.isNull() ).add( age.eq( new Integer(0) ) ).add( age.eq( new Integer(1) ) ).add( ag

12、e.eq( new Integer(2) ) ) ).add( Property.forName(name).in( new String Fritz, Izi, Pk ) ).list();16.3. 结果集排序你可以使用org.hibernate.criterion.Order来为查询结果排序。List cats = sess.createCriteria(Cat.class).add( Restrictions.like(name, F%).addOrder( Order.asc(name) ).addOrder( Order.desc(age) ).setMaxResults(50).

13、list();List cats = sess.createCriteria(Cat.class).add( Property.forName(name).like(F%) ).addOrder( Property.forName(name).asc() ).addOrder( Property.forName(age).desc() ).setMaxResults(50).list();16.4. 关联你可以使用createCriteria()非常容易的在互相关联的实体间建立 约束。List cats = sess.createCriteria(Cat.class).add( Restric

14、tions.like(name, F%).createCriteria(kittens).add( Restrictions.like(name, F%).list();注意第二个 createCriteria()返回一个新的 Criteria实例,该实例引用kittens 集合中的元素。接下来,替换形态在某些情况下也是很有用的。List cats = sess.createCriteria(Cat.class).createAlias(kittens, kt).createAlias(mate, mt).add( Restrictions.eqProperty(kt.name, mt.nam

15、e) ).list();(createAlias()并不创建一个新的 Criteria实例。)Cat实例所保存的之前两次查询所返回的kittens集合是 没有被条件预过滤的。如果你希望只获得符合条件的kittens, 你必须使用returnMaps()。List cats = sess.createCriteria(Cat.class).createCriteria(kittens, kt).add( Restrictions.eq(name, F%) ).returnMaps().list();Iterator iter = cats.iterator();while ( iter.hasNext() ) Map map = (Map) iter.next();Ca

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号