Hibernate三大类查询总结.docx

上传人:b****2 文档编号:17661017 上传时间:2023-07-27 格式:DOCX 页数:24 大小:24.74KB
下载 相关 举报
Hibernate三大类查询总结.docx_第1页
第1页 / 共24页
Hibernate三大类查询总结.docx_第2页
第2页 / 共24页
Hibernate三大类查询总结.docx_第3页
第3页 / 共24页
Hibernate三大类查询总结.docx_第4页
第4页 / 共24页
Hibernate三大类查询总结.docx_第5页
第5页 / 共24页
Hibernate三大类查询总结.docx_第6页
第6页 / 共24页
Hibernate三大类查询总结.docx_第7页
第7页 / 共24页
Hibernate三大类查询总结.docx_第8页
第8页 / 共24页
Hibernate三大类查询总结.docx_第9页
第9页 / 共24页
Hibernate三大类查询总结.docx_第10页
第10页 / 共24页
Hibernate三大类查询总结.docx_第11页
第11页 / 共24页
Hibernate三大类查询总结.docx_第12页
第12页 / 共24页
Hibernate三大类查询总结.docx_第13页
第13页 / 共24页
Hibernate三大类查询总结.docx_第14页
第14页 / 共24页
Hibernate三大类查询总结.docx_第15页
第15页 / 共24页
Hibernate三大类查询总结.docx_第16页
第16页 / 共24页
Hibernate三大类查询总结.docx_第17页
第17页 / 共24页
Hibernate三大类查询总结.docx_第18页
第18页 / 共24页
Hibernate三大类查询总结.docx_第19页
第19页 / 共24页
Hibernate三大类查询总结.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Hibernate三大类查询总结.docx

《Hibernate三大类查询总结.docx》由会员分享,可在线阅读,更多相关《Hibernate三大类查询总结.docx(24页珍藏版)》请在冰点文库上搜索。

Hibernate三大类查询总结.docx

Hibernate三大类查询总结

Hibernate目前总共分为三大类查询:

cretiria,hql,本地sql【以下篇章搜集于网络,感谢作者】

第一:

关于cretiria的查询

  具有一个直观的、可扩展的条件查询API是Hibernate的特色。

15.1.创建一个Criteria实例

org.hibernate.Criteria接口表示特定持久类的一个查询。

Session是Criteria实例的工厂。

Java代码

1.Criteria crit = sess.createCriteria(Cat.class);  

2.crit.setMaxResults(50);  

3.List cats = crit.list();

Criteriacrit=sess.createCriteria(Cat.class);

crit.setMaxResults(50);

Listcats=crit.list();

 

15.2.限制结果集内容

一个单独的查询条件是org.hibernate.criterion.Criterion接口的一个实例。

org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .add( Restrictions.like("name", "Fritz%") )  

3.     .add( Restrictions.between("weight", minWeight, maxWeight) )  

4.     .list();   

Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.like("name","Fritz%"))

.add(Restrictions.between("weight",minWeight,maxWeight))

.list();

约束可以按逻辑分组。

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .add( Restrictions.like("name", "Fritz%") )  

3.     .add( Restrictions.or(  

4.         Restrictions.eq( "age", new Integer(0) ),  

5.         Restrictions.isNull("age")  

6.     ) )  

7.     .list();  

8.List cats = sess.createCriteria(Cat.class)  

9.     .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )  

10.     .add( Restrictions.disjunction()  

11.         .add( Restrictions.isNull("age") )  

12.      .add( Restrictions.eq("age", new Integer(0) ) )  

13.      .add( Restrictions.eq("age", new Integer

(1) ) )  

14.      .add( Restrictions.eq("age", new Integer

(2) ) )  

15.     ) )  

16.     .list();Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.like("name","Fritz%"))

.add(Restrictions.or(

Restrictions.eq("age",newInteger(0)),

Restrictions.isNull("age")

))

.list();

Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.in("name",newString[]{"Fritz","Izi","Pk"}))

.add(Restrictions.disjunction()

.add(Restrictions.isNull("age"))

.add(Restrictions.eq("age",newInteger(0)))

.add(Restrictions.eq("age",newInteger

(1)))

.add(Restrictions.eq("age",newInteger

(2)))

))

.list();

 

Hibernate提供了相当多的内置criterion类型(Restrictions子类),但是尤其有用的是可以允许你直接使用SQL。

 

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .add( Restrictions.sql("lower({alias}.name) like lower(?

)", "Fritz%", Hibernate.STRING) )  

3.     .list();  Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.sql("lower({alias}.name)likelower(?

)","Fritz%",Hibernate.STRING))

.list();

 

{alias}占位符应当被替换为被查询实体的列别名。

Property实例是获得一个条件的另外一种途径。

你可以通过调用Property.forName()创建一个Property。

Java代码

1.Property age = Property.forName("age");  

2.List cats = sess.createCriteria(Cat.class)  

3.     .add( Restrictions.disjunction()  

4.         .add( age.isNull() )  

5.      .add( age.eq( new Integer(0) ) )  

6.      .add( age.eq( new Integer

(1) ) )  

7.      .add( age.eq( new Integer

(2) ) )  

8.     ) )  

9.     .add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) )  

10.     .list();Propertyage=Property.forName("age");

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("name").in(newString[]{"Fritz","Izi","Pk"}))

.list();

 

15.3.结果集排序

你可以使用org.hibernate.criterion.Order来为查询结果排序。

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .add( Restrictions.like("name", "F%")  

3.     .addOrder( Order.asc("name") )  

4.     .addOrder( Order.desc("age") )  

5.     .setMaxResults(50)  

6.     .list();  

7.List cats = sess.createCriteria(Cat.class)  

8.     .add( Property.forName("name").like("F%") )  

9.     .addOrder( Property.forName("name").asc() )  

10.     .addOrder( Property.forName("age").desc() )  

11.     .setMaxResults(50)  

12.     .list();  

Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.like("name","F%")

.addOrder(Order.asc("name"))

.addOrder(Order.desc("age"))

.setMaxResults(50)

.list();

Listcats=sess.createCriteria(Cat.class)

.add(Property.forName("name").like("F%"))

.addOrder(Property.forName("name").asc())

.addOrder(Property.forName("age").desc())

.setMaxResults(50)

.list();

 

15.4.关联

你可以使用createCriteria()非常容易的在互相关联的实体间建立约束。

 

 

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .add( Restrictions.like("name", "F%")  

3.     .createCriteria("kittens")  

4.         .add( Restrictions.like("name", "F%")  

5.     .list();  

Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.like("name","F%")

.createCriteria("kittens")

.add(Restrictions.like("name","F%")

.list();

 

注意第二个createCriteria()返回一个新的Criteria实例,该实例引用kittens集合中的元素。

接下来,替换形态在某些情况下也是很有用的。

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .createAlias("kittens", "kt")  

3.     .createAlias("mate", "mt")  

4.     .add( Restrictions.eqProperty("kt.name", "mt.name") )  

5.     .list();  

Listcats=sess.createCriteria(Cat.class)

.createAlias("kittens","kt")

.createAlias("mate","mt")

.add(Restrictions.eqProperty("kt.name","mt.name"))

.list();

 

(createAlias()并不创建一个新的Criteria实例。

Cat实例所保存的之前两次查询所返回的kittens集合是没有被条件预过滤的。

如果你希望只获得符合条件的kittens,你必须使用returnMaps()。

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .createCriteria("kittens", "kt")  

3.         .add( Restrictions.eq("name", "F%") )  

4.     .returnMaps()  

5.     .list();  

6.Iterator iter = cats.iterator();  

7.while ( iter.hasNext() ) {  

8.     Map map = (Map) iter.next();  

9.     Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);  

10.     Cat kitten = (Cat) map.get("kt");  

11.}  

Listcats=sess.createCriteria(Cat.class)

.createCriteria("kittens","kt")

.add(Restrictions.eq("name","F%"))

.returnMaps()

.list();

Iteratoriter=cats.iterator();

while(iter.hasNext()){

Mapmap=(Map)iter.next();

Catcat=(Cat)map.get(Criteria.ROOT_ALIAS);

Catkitten=(Cat)map.get("kt");

}

 

15.5.动态关联抓取

你可以使用setFetchMode()在运行时定义动态关联抓取的语义。

Java代码

1.List cats = sess.createCriteria(Cat.class)  

2.     .add( Restrictions.like("name", "Fritz%") )  

3.     .setFetchMode("mate", FetchMode.EAGER)  

4.     .setFetchMode("kittens", FetchMode.EAGER)  

5.     .list();  

Listcats=sess.createCriteria(Cat.class)

.add(Restrictions.like("name","Fritz%"))

.setFetchMode("mate",FetchMode.EAGER)

.setFetchMode("kittens",FetchMode.EAGER)

.list();

 

这个查询可以通过外连接抓取mate和kittens。

查看第19.1节“抓取策略(Fetchingstrategies)”可以获得更多信息。

15.6.查询示例

org.hibernate.criterion.Example类允许你通过一个给定实例构建一个条件查询。

Java代码

1.Cat cat = new Cat();  

2.cat.setSex('F');  

3.cat.setColor(Color.BLACK);  

4.List results = session.createCriteria(Cat.class)  

5.     .add( Example.create(cat) )  

6.     .list();

Catcat=newCat();

cat.setSex('F');

cat.setColor(Color.BLACK);

Listresults=session.createCriteria(Cat.class)

.add(Example.create(cat))

.list();

 

版本属性、标识符和关联被忽略。

默认情况下值为null的属性将被排除。

你可以自行调整Example使之更实用。

Java代码

1.Example example = Example.create(cat)  

2.     .excludeZeroes()            //exclude zero valued properties  

3.     .excludeProperty("color")   //exclude the property named "color"  

4.     .ignoreCase()               //perform case insensitive string comparisons  

5.     .enableLike();              //use like for string comparisons  

6.List results = session.createCriteria(Cat.class)  

7.     .add(example)  

8.     .list();

Exampleexample=Example.create(cat)

.excludeZeroes()//excludezerovaluedproperties

.excludeProperty("color")//excludethepropertynamed"color"

.ignoreCase()//performcaseinsensitivestringcomparisons

.enableLike();//uselikeforstringcomparisons

Listresults=session.createCriteria(Cat.class)

.add(example)

.list();

 

你甚至可以使用examples在关联对象上放置条件。

Java代码

1.List results = session.createCriteria(Cat.class)  

2.     .add( Example.create(cat) )  

3.     .createCriteria("mate")  

4.         .add( Example.create( cat.getMate() ) )  

5.     .list();  

Listresults=session.createCriteria(Cat.class)

.add(Example.create(cat))

.createCriteria("mate")

.add(Example.create(cat.getMate()))

.list();

 

15.7.投影(Projections)、聚合(aggregation)和分组(grouping)

org.hibernate.criterion.Projections是Projection的实例工厂。

我们通过调用setProjection()应用投影到一个查询。

在一个条件查询中没有必要显式的使用"groupby"。

某些投影类型就是被定义为分组投影,他们也出现在SQL的groupby子句中。

你可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。

下面是两种不同的实现方式:

Java代码

1.List results = session.createCriteria(Cat.class)  

2.     .setProjection( Projections.alias( Projections.groupProperty("color"), "colr" ) )  

3.     .addOrder( Order.asc("colr") )  

4.     .list();  

5.List results = session.createCriteria(Cat.class)  

6.     .setProjection( Projections.groupProperty("color").as("colr") )  

7.     .addOrder( Order.asc("colr") )  

8.     .list();  

alias()和as()方法简便的将一个投影实例包装到另外一个别名的Projection实例中。

简而言之,当你添加一个投影到一个投影列表中时你可以为它指定一个别名:

Java代码

1.List results = session.createCriteria(Cat.class)  

2.     .setProjection( Projections.projectionList()  

3.         .add( Projections.rowCount(), "catCountByColor" )  

4.         .add( Projections.avg("weight"), "avgWeight" )  

5.         .add( Projections.max("weight"), "maxWeight" )  

6.         .add( Projections.groupProperty("color"), "color" )  

7.     )  

8.     .addOrder( Order.desc("catCountByColor") )  

9.     .addOrder( Order.desc("avgWeight") )  

10.     .list();  

11.List results = session.createCriteria(Domestic.clas

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2