Hibernate中Criteria的完整用法Word格式文档下载.docx
《Hibernate中Criteria的完整用法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Hibernate中Criteria的完整用法Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
![Hibernate中Criteria的完整用法Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/15/5fb02e64-2efc-4a35-a1c3-b61e32e555c7/5fb02e64-2efc-4a35-a1c3-b61e32e555c71.gif)
Criteriacri=session.createCriteria(JdItemSerialnumber.class);
Criterioncron=Restrictions.like("
customer"
name);
cri.add(cron);
list=cri.list();
==============================
比较运算符
HQL运算符QBC运算符含义
=Restrictions.eq()等于
<
>
Restrictions.not(Exprission.eq())不等于
Restrictions.gt()大于
=Restrictions.ge()大于等于
Restrictions.lt()小于
=Restrictions.le()小于等于
isnullRestrictions.isnull()等于空值
isnotnullRestrictions.isNotNull()非空值
likeRestrictions.like()字符串模式匹配
andRestrictions.and()逻辑与
andRestrictions.conjunction()逻辑与
orRestrictions.or()逻辑或
orRestrictions.disjunction()逻辑或
notRestrictions.not()逻辑非
in(列表)Restrictions.in()等于列表中的某一个值
ontin(列表)Restrictions.not(Restrictions.in())不等于列表中任意一个值
betweenxandyRestrictions.between()闭区间xy中的任意值
notbetweenxandyRestrictions.not(Restrictions..between())小于值X或者大于值y
3:
HQL
Stringhql="
selects.name,avg(s.age)fromStudentsgroupbys.name"
;
Queryquery=session.createQuery(hql);
list=query.list();
....
4:
本地SQL查询
session=sessionFactory.openSession();
tran=session.beginTransaction();
SQLQuerysq=session.createSQLQuery(sql);
sq.addEntity(Student.class);
list=sq.list();
mit();
16.1.创建一个Criteria实例
org.hibernate.Criteria接口表示特定持久类的一个查询。
Session是Criteria实例的工厂。
Criteriacrit=sess.createCriteria(Cat.class);
crit.setMaxResults(50);
Listcats=crit.list();
16.2.限制结果集内容
一个单独的查询条件是org.hibernate.criterion.Criterion接口的一个实例。
org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。
Listcats=sess.createCriteria(Cat.class)
.add(Restrictions.like("
name"
"
Fritz%"
))
.add(Restrictions.between("
weight"
minWeight,maxWeight))
.list();
约束可以按逻辑分组。
.add(Restrictions.or(
Restrictions.eq("
age"
newInteger(0)),
Restrictions.isNull("
)
))
.add(Restrictions.in("
newString[]{"
Fritz"
Izi"
Pk"
}))
.add(Restrictions.disjunction()
.add(Restrictions.isNull("
.add(Restrictions.eq("
newInteger(0)))
newInteger
(1)))
newInteger
(2)))
Hibernate提供了相当多的内置criterion类型(Restrictions子类),但是尤其有用的是可以允许你直接使用SQL。
.add(Restrictions.sql("
lower({alias}.name)likelower(?
)"
Hibernate.STRING))
{alias}占位符应当被替换为被查询实体的列别名。
Property实例是获得一个条件的另外一种途径。
你可以通过调用Property.forName()创建一个Property。
Propertyage=Property.forName("
);
.add(age.isNull())
.add(age.eq(newInteger(0)))
.add(age.eq(newInteger
(1)))
.add(age.eq(newInteger
(2)))
.add(Property.forName("
).in(newString[]{"
16.3.结果集排序
你可以使用org.hibernate.criterion.Order来为查询结果排序。
F%"
.addOrder(Order.asc("
.addOrder(Order.desc("
.setMaxResults(50)
).like("
.addOrder(Property.forName("
).asc())
).desc())
16.4.关联
你可以使用createCriteria()非常容易的在互相关联的实体间建立约束。
.createCriteria("
kittens"
注意第二个createCriteria()返回一个新的Criteria实例,该实例引用kittens集合中的元素。
接下来,替换形态在某些情况下也是很有用的。
.createAlias("
kt"
mate"
mt"
.add(Restrictions.eqProperty("
kt.name"
mt.name"
(createAlias()并不创建一个新的Criteria实例。
Cat实例所保存的之前两次查询所返回的kittens集合是没有被条件预过滤的。
如果你希望只获得符合条件的kittens,你必须使用returnMaps()。
.returnMaps()
Iteratoriter=cats.iterator();
while(iter.hasNext()){
Mapmap=(Map)iter.next();
Catcat=(Cat)map.get(Criteria.ROOT_ALIAS);
Catkitten=(Cat)map.get("
}
16.5.动态关联抓取
你可以使用setFetchMode()在运行时定义动态关联抓取的语义。
.setFetchMode("
FetchMode.EAGER)
这个查询可以通过外连接抓取mate和kittens。
查看第20.1节“抓取策略(F