Criteria 和 DetachedCriteria 的区别和应用Word文件下载.docx
《Criteria 和 DetachedCriteria 的区别和应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《Criteria 和 DetachedCriteria 的区别和应用Word文件下载.docx(24页珍藏版)》请在冰点文库上搜索。
//对String类型的属性,无论在那里值在那里都匹配。
相当于%value%
Project主要是让Criteria能够进行报表查询,并可以实现分组。
Project主要有SimpleProjection、ProjectionList和Property三个实现。
其中SimpleProjection和ProjectionList的实例化是由内建的Projections来完成,如提供的avg、count、max、min、sum可以让开发者很容易对某个字段进行统计查询。
Property是对某个字段进行查询条件的设置,如通过Porperty.forName(“color”).in(newString[]{“black”,”red”,”write”});
则可以创建一个Project实例。
通过criteria的add(Project)方法加入到查询条件中去。
使用Criteria进行查询,主要要清晰的是Hibernate提供了那些类和方法来满足开发中查询条件的创建和组装,下面介绍几种用法:
创建一个Criteria实例
org.hibernate.Criteria接口表示特定持久类的一个查询。
Session是Criteria实例的工厂。
Criteriacrit=sess.createCriteria(Cat.class);
crit.setMaxResults(50);
Listcats=crit.list();
crit.setMaxResults(50);
Java代码
Criteria
crit
=
sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List
cats
crit.list();
Criteriacrit=sess.createCriteria(Cat.class);
crit.setMaxResults(50);
Listcats=crit.list();
限制结果集内容
一个单独的查询条件是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();
Listcats=sess.createCriteria(Cat.class)
.add(Restrictions.like("
))
.add(Restrictions.between("
minWeight,maxWeight))
sess.createCriteria(Cat.class)
.add(
Restrictions.like("
"
)
Restrictions.between("
minWeight,
maxWeight)
.list();
Listcats=sess.createCriteria(Cat.class).add(Restrictions.like("
"
)).add(Restrictions.between("
minWeight,maxWeight)).list();
约束可以按逻辑分组。
.add(Restrictions.or(
Restrictions.eq("
age"
newInteger(0)),
Restrictions.isNull("
)
.add(Restrictions.or(
newInteger(0)),
Restrictions.isNull("
)
1.
2.
1.Listcats=sess.createCriteria(Cat.class)
.add(Restrictions.in("
newString[]{"
Fritz"
Izi"
Pk"
}))
3.
.add(Restrictions.disjunction()
4.
.add(Restrictions.isNull("
5.
.add(Restrictions.eq("
newInteger(0)))
6.
newInteger
(1)))
7.
newInteger
(2)))
8.
9.
1.Listcats=sess.createCriteria(Cat.class)
}))
.add(Restrictions.disjunction()
.add(Restrictions.isNull("
.add(Restrictions.eq("
newInteger(0)))
newInteger
(1)))
newInteger
(2)))
1.List
Restrictions.in(
new
String[]
{
}
Restrictions.disjunction()
Restrictions.isNull("
Restrictions.eq("
Integer(0)
Integer
(1)
Integer
(2)
Listcats=sess.createCriteria(Cat.class).add(Restrictions.in("
newString[]{"
})).add(Restrictions.disjunction().add(Restrictions.isNull("
)).add(Restrictions.eq("
newInteger(0))).add(Restrictions.eq("
newInteger
(1))).add(Restrictions.eq("
newInteger
(2))))).list();
Hibernate提供了相当多的内置criterion类型(Restrictions子类),但是尤其有用的是可以允许你直接使用SQL。
.add(Restrictions.sql("
lower({alias}.name)likelower(?
)"
3.Hibernate.STRING))
.add(Restrictions.sql("
3.Hibernate.STRING))
Restrictions.sql("
lower({alias}.name)
like
lower(?
Hibernate.STRING)
Listcats=sess.createCriteria(Cat.class).add(Restrictions.sql("
Hibernate.STRING)).list();
{alias}占位符应当被替换为被查询实体的列别名。
Property实例是获得一个条件的另外一种途径。
你可以通过调用Property.forName()创建一个Property。
1.Propertyage=Property.forName("
);
2.stcats=sess.createCriteria(Cat.class)
.add(age.isNull())
.add(age.eq(newInteger(0)))
.add(age.eq(newInteger
(1)))
.add(age.eq(newInteger
(2)))
.add(Property.forName("
).in(newString[]{"
10.
2.stcats=sess.createCriteria(Cat.class)
.add(age.isNull())
.add(age.eq(newInteger(0)))
.add(age.eq(newInteger
(1)))
.add(age.eq(newInteger
(2)))
.add(Property.forName("
1.Property
age
Property.forName("
);
age.isNull()
age.eq(
).in(
Propertyage=Property.forName("
Listcats=sess.createCriteria(Cat.class).add(Restrictions.disjunction().add(age.isNull()).add(age.eq(newInteger(0))).add(age.eq(newInteger
(1))).add(age.eq(newInteger
(2))))).add(Property.forName("
).in(newString[]{"
})).list();
3.结果集排序
你可以使用org.hibernate.criterion.Order来为查询结果排序。
F%"
.addOrder(Order.asc("
.addOrder(Order.desc("
.setMaxResults(50)
.addOrder(Order.asc("
.addOrder(Order.desc("
.setMaxResults(50)
.addOrder(
Order.asc("
Order.desc("
.setMaxResults(50)
).addOrder(Order.asc("
)).addOrder(Order.desc("
)).setMaxResults(50).list();
).like("
.addOrder(Property.forName("
).asc())
).desc())
.addOrder(Property.forName("
).asc())
).desc())
).like("
).asc()
).desc()
Listcats=sess.createCriteria(Cat.class).add(Property.forName("
)).addOrder(Property.forName("
).asc()).addOrder(Property.forName("
).desc()).setMaxResults(50).list();
4.关联
你可以使用createCriteria()非常容易的在互相关联的实体间建立约束。
.add(