ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:24.74KB ,
资源ID:17661017      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17661017.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Hibernate三大类查询总结.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Hibernate三大类查询总结.docx

1、Hibernate三大类查询总结Hibernate目前总共分为三大类查询:cretiria,hql,本地sql 【以下篇章搜集于网络,感谢作者】第一:关于cretiria的查询 具有一个直观的、可扩展的条件查询API是Hibernate的特色。 15.1. 创建一个Criteria 实例org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。Java代码 1. Criteriacrit=sess.createCriteria(Cat.class); 2. crit.setMaxResults(50); 3. Listcats=cr

2、it.list();Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();15.2. 限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。Java代码 1. Listcats=sess.createCriteria(Cat.class) 2. .add(Restricti

3、ons.like(name,Fritz%) 3. .add(Restrictions.between(weight,minWeight,maxWeight) 4. .list(); List cats = sess.createCriteria(Cat.class) .add( Restrictions.like(name, Fritz%) ) .add( Restrictions.between(weight, minWeight, maxWeight) ) .list();约束可以按逻辑分组。Java代码 1. Listcats=sess.createCriteria(Cat.class)

4、 2. .add(Restrictions.like(name,Fritz%) 3. .add(Restrictions.or( 4. Restrictions.eq(age,newInteger(0), 5. Restrictions.isNull(age) 6. ) 7. .list(); 8. Listcats=sess.createCriteria(Cat.class) 9. .add(Restrictions.in(name,newStringFritz,Izi,Pk) 10. .add(Restrictions.disjunction() 11. .add(Restrictions

5、.isNull(age) 12. .add(Restrictions.eq(age,newInteger(0) 13. .add(Restrictions.eq(age,newInteger(1) 14. .add(Restrictions.eq(age,newInteger(2) 15. ) 16. .list();List cats = sess.createCriteria(Cat.class) .add( Restrictions.like(name, Fritz%) ) .add( Restrictions.or( Restrictions.eq( age, new Integer(

6、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) )

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

8、ria(Cat.class) .add( Restrictions.sql(lower(alias.name) like lower(?), Fritz%, Hibernate.STRING) ) .list();alias占位符应当被替换为被查询实体的列别名。 Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个Property。Java代码 1. Propertyage=Property.forName(age); 2. Listcats=sess.createCriteria(Cat.class) 3. .add(Restrict

9、ions.disjunction() 4. .add(age.isNull() 5. .add(age.eq(newInteger(0) 6. .add(age.eq(newInteger(1) 7. .add(age.eq(newInteger(2) 8. ) 9. .add(Property.forName(name).in(newStringFritz,Izi,Pk) 10. .list();Property age = Property.forName(age);List cats = sess.createCriteria(Cat.class) .add( Restrictions.

10、disjunction() .add( age.isNull() ) .add( age.eq( new Integer(0) ) ) .add( age.eq( new Integer(1) ) ) .add( age.eq( new Integer(2) ) ) ) ) .add( Property.forName(name).in( new String Fritz, Izi, Pk ) ) .list();15.3. 结果集排序你可以使用org.hibernate.criterion.Order来为查询结果排序。Java代码 1. Listcats=sess.createCriteri

11、a(Cat.class) 2. .add(Restrictions.like(name,F%) 3. .addOrder(Order.asc(name) 4. .addOrder(Order.desc(age) 5. .setMaxResults(50) 6. .list(); 7. Listcats=sess.createCriteria(Cat.class) 8. .add(Property.forName(name).like(F%) 9. .addOrder(Property.forName(name).asc() 10. .addOrder(Property.forName(age)

12、.desc() 11. .setMaxResults(50) 12. .list(); List cats = sess.createCriteria(Cat.class) .add( Restrictions.like(name, F%) .addOrder( Order.asc(name) ) .addOrder( Order.desc(age) ) .setMaxResults(50) .list();List cats = sess.createCriteria(Cat.class) .add( Property.forName(name).like(F%) ) .addOrder(

13、Property.forName(name).asc() ) .addOrder( Property.forName(age).desc() ) .setMaxResults(50) .list();15.4. 关联你可以使用createCriteria()非常容易的在互相关联的实体间建立 约束。Java代码 1. Listcats=sess.createCriteria(Cat.class) 2. .add(Restrictions.like(name,F%) 3. .createCriteria(kittens) 4. .add(Restrictions.like(name,F%) 5.

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

15、(kittens,kt) 3. .createAlias(mate,mt) 4. .add(Restrictions.eqProperty(kt.name,mt.name) 5. .list(); List cats = sess.createCriteria(Cat.class) .createAlias(kittens, kt) .createAlias(mate, mt) .add( Restrictions.eqProperty(kt.name, mt.name) ) .list();(createAlias()并不创建一个新的 Criteria实例。) Cat实例所保存的之前两次查询

16、所返回的kittens集合是 没有被条件预过滤的。如果你希望只获得符合条件的kittens, 你必须使用returnMaps()。Java代码 1. Listcats=sess.createCriteria(Cat.class) 2. .createCriteria(kittens,kt) 3. .add(Restrictions.eq(name,F%) 4. .returnMaps() 5. .list(); 6. Iteratoriter=cats.iterator(); 7. while(iter.hasNext() 8. Mapmap=(Map)iter.next(); 9. Catc

17、at=(Cat)map.get(Criteria.ROOT_ALIAS); 10. Catkitten=(Cat)map.get(kt); 11. 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(); Cat cat = (C

18、at) map.get(Criteria.ROOT_ALIAS); Cat kitten = (Cat) map.get(kt);15.5. 动态关联抓取你可以使用setFetchMode()在运行时定义动态关联抓取的语义。Java代码 1. Listcats=sess.createCriteria(Cat.class) 2. .add(Restrictions.like(name,Fritz%) 3. .setFetchMode(mate,FetchMode.EAGER) 4. .setFetchMode(kittens,FetchMode.EAGER) 5. .list(); List c

19、ats = sess.createCriteria(Cat.class) .add( Restrictions.like(name, Fritz%) ) .setFetchMode(mate, FetchMode.EAGER) .setFetchMode(kittens, FetchMode.EAGER) .list();这个查询可以通过外连接抓取mate和kittens。 查看第 19.1 节 “ 抓取策略(Fetching strategies) ”可以获得更多信息。 15.6. 查询示例org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查

20、询。Java代码 1. Catcat=newCat(); 2. cat.setSex(F); 3. cat.setColor(Color.BLACK); 4. Listresults=session.createCriteria(Cat.class) 5. .add(Example.create(cat) 6. .list();Cat cat = new Cat();cat.setSex(F);cat.setColor(Color.BLACK);List results = session.createCriteria(Cat.class) .add( Example.create(cat)

21、) .list();版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。 你可以自行调整Example使之更实用。Java代码 1. Exampleexample=Example.create(cat) 2. .excludeZeroes()/excludezerovaluedproperties 3. .excludeProperty(color)/excludethepropertynamedcolor 4. .ignoreCase()/performcaseinsensitivestringcomparisons 5. .enableLike();/uselikefors

22、tringcomparisons 6. Listresults=session.createCriteria(Cat.class) 7. .add(example) 8. .list();Example example = Example.create(cat) .excludeZeroes() /exclude zero valued properties .excludeProperty(color) /exclude the property named color .ignoreCase() /perform case insensitive string comparisons .e

23、nableLike(); /use like for string comparisonsList results = session.createCriteria(Cat.class) .add(example) .list();你甚至可以使用examples在关联对象上放置条件。Java代码 1. Listresults=session.createCriteria(Cat.class) 2. .add(Example.create(cat) 3. .createCriteria(mate) 4. .add(Example.create(cat.getMate() 5. .list();

24、List results = 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()应用投影到一个查询。 在一个条件查询中没有必要显式的使

25、用 group by 。某些投影类型就是被定义为 分组投影,他们也出现在SQL的group by子句中。 你可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。下面是两种不同的实现方式:Java代码 1. Listresults=session.createCriteria(Cat.class) 2. .setProjection(Projections.alias(Projections.groupProperty(color),colr) 3. .addOrder(Order.asc(colr) 4. .list(); 5. Listresults=session.cre

26、ateCriteria(Cat.class) 6. .setProjection(Projections.groupProperty(color).as(colr) 7. .addOrder(Order.asc(colr) 8. .list(); alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之,当你添加一个投影到一个投影列表中时 你可以为它指定一个别名:Java代码 1. Listresults=session.createCriteria(Cat.class) 2. .setProjection(Projections.projec

27、tionList() 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. Listresults=session.createCriteria(Domestic.clas

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

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