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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Hibernate查询.docx

1、Hibernate查询Hibernate的查询语言:1. Native SQL: 本地语言(数据库自己的SQL语句)功能强大,2. HQL Hibernate Query Language(更灵活,推荐) 条件查询、分页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.3. QBC(Query By Criteria) 查询方式这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections.Hibernate Query Language:HQL提供了是十分强大的功能,它是针对持久化对象,用取得对象,

2、而不进行update,delete和insert等操作。而且HQL是面向对象的,具备继承,多态和关联等特性。from子句:from子句是最简单的HQL,例如from Student,也可以写成 select s from Student s。它简单的返回Student类的所有实例。Query query=session.createQuery( from Course);List list=query.list(); for (Course c : list) System.out.println(c.getName(); 值得注意的是除了JAVA类和属性的名称外,HQL语句对大小写不敏感。s

3、elect子句:有时并不需要取得对象的所有属性,这时可以使用select子句进行属性查询,如select s.name from Student sQuery query=session.createQuery(select c.name from Course c);带where条件的查询:where子句:HQL也支持子查询,它通过where子句实现这一机制。where子句可以让用户缩小要返回的实例的列表范围。例如下面语句会返回所有名字为Bill的Student实例:Query query = session.createQuery(from Student as s where s.nam

4、e=Bill);where子句允许出现的表达式包括了SQL中可以使用的大多数情况。数学操作:+,-,*,/真假比较操作:=, =, =, , !=, like逻辑操作:and ,or, not字符串连接:|Query query=session.createQuery( from Course where name =武术);排序:order by查询返回列表可以按照任何返回的类或者组件的属性排序from Student s order by s.name asc/desc连接查询与SQL一样,HQL也支持连接查询,如内连接,外连接和交叉连接:inner join:内连接left outer

5、join:左外连接right outer join:右外连接full join:全连接,但不常用/sql写 select . From 表1 inner join 表2 on 表1.列=表2.列Queryquery=session.createQuery(fromGroupgjoing.students);String hql = from Book b left join b.bookType;注意join 后写一个的前面实体类别名.属性名Query query=session.createQuery( from Course c join c.students);可以使用冒号(:),作为占

6、位符,来接受参数使用。如下(链式编程)Query query=session.createQuery( from 类名 h where h.hid:id).setInteger(id,1);可以使用?作为占位符. Query query = session.createQuery( from 类名 h where h.hid?); /注意这里的索引值query.setInteger(0, 1);分页:Query query = session.createQuery( from Husband h order by h.hid desc); /从第几条开始显示,从0开始 query.setFi

7、rstResult(0); /每页显示的最大记录数 query.setMaxResults(3);模糊查询如何实现?带参数的sql如何实现?String name=小; Query query = session.createQuery( from 类名 h where h.name like ?); /注意这里的索引值 query.setString(0, %+name+%);其他模糊查询的写法:is null /is not null / between . and /in(.)了解Query q = session.createQuery(select max(m.id), min(m.

8、id), avg(m.id), sum(m.id) from 类名 m); Object o = (Object)q.uniqueResult(); System.out.println(o0 + - + o1 + - + o2 + - + o3);如果对HQL不喜欢,也不习惯可以使用SQL的检索方法:String sql= select * from book where id=? and name=? ; /2 创建一个query对象 Query query=session.createSQLQuery(sql); query.setString(0, 1); query.setStrin

9、g(1, 天龙侠侣); /3 调用query对象的方法 List list=query.list(); Iterator itor=list.iterator(); while(itor.hasNext() Object obj=(Object )itor.next(); System.out.println(obj0+ , +obj1+, + obj2); Criteria Query方式Hibernate支持Criteria查询,这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,可以使用Session的createCriteria()方法构建一个org.hibernate

10、.Criteria实例,然后把具体的查询条件通过Criteria的add方法加入到Criteria实例中。Criteria是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。Criter

11、ion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。而Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操作符进行来联结查询条件集合。Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件(SimpleExpression 实例)。除此之外, Restrictions 还提供了方法来创建 c

12、onjunction 和disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合。创建一个Criteria 实例org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();限制内容限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例

13、。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%

14、) ).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 Intege

15、r(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)

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

17、e.eq( new Integer(2) ) ) ).add( Property.forName(name).in( new String Fritz, Izi, Pk ) ).list();结果集排序可以使用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).list();

18、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();关联你可以使用createCriteria()非常容易的在互相关联的实体间建立 约束。List cats = sess.createCriteria(Cat.class).add( Restrictions.like(na

19、me, 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. name) ).list()

20、;(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

21、 map = (Map) iter.next();Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);Cat kitten = (Cat) map.get(kt);动态关联抓取你可以使用setFetchMode()在运行时定义动态关联抓取的语义。List cats = sess.createCriteria(Cat.class).add( Restrictions.like(name, Fritz%) ).setFetchMode(mate, FetchMode.EAGER).setFetchMode(kittens, FetchMode.EAGER).l

22、ist();这个查询可以通过外连接抓取mate和kittens。查询示例org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。Cat cat = new Cat();cat.setSex(F);cat.setColor(Color.BLACK);List results = session.createCriteria(Cat.class).add( Example.create(cat) ).list();版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。可以自行调整Example使之更实用。Example example

23、 = Example.create(cat).excludeZeroes() /exclude zero valued properties.excludeProperty(color) /exclude the property named color.ignoreCase() /perform case insensitive string comparisons.enableLike(); /use like for string comparisonsList results = session.createCriteria(Cat.class).add(example).list()

24、;甚至可以使用examples在关联对象上放置条件。List results = session.createCriteria(Cat.class).add( Example.create(cat) ).createCriteria(mate).add( Example.create( cat.getMate() ) ).list();投影聚合分组org.hibernate.criterion.Projections是 Projection 的实例工厂。通过调用 setProjection()应用投影到一个查询。List results = session.createCriteria(Cat

25、.class).setProjection( Projections.rowCount() ).add( Restrictions.eq(color, Color.BLACK) ).list();List results = session.createCriteria(Cat.class).setProjection( Projections.projectionList().add( Projections.rowCount() ).add( Projections.avg(weight) ).add( Projections.max(weight) ).add( Projections.

26、groupProperty(color) ).list();在一个条件查询中没有必要显式的使用 group by 。某些投影类型就是被定义为 分组投影,他们也出现在SQL的group by子句中。可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。实现方式:List results = session.createCriteria(Cat.class).setProjection( Projections.alias( Projections.groupProperty(color), colr ) ).addOrder( Order.asc(colr) ).list();?

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

28、s.projectionList().add( Projections.rowCount(), catCountByColor ).add( Projections.avg(weight), avgWeight ).add( Projections.max(weight), maxWeight ).add( Projections.groupProperty(color), color ).addOrder( Order.desc(catCountByColor) ).addOrder( Order.desc(avgWeight) ).list();List results = session

29、.createCriteria(Domestic.class, cat).createAlias(kittens, kit).setProjection( Projections.projectionList().add( Projections.property(cat. name), catName ).add( Projections.property(kit. name), kitName ).addOrder( Order.asc(catName) ).addOrder( Order.asc(kitName) ).list();也可以使用Property.forName()来表示投影

30、:List results = session.createCriteria(Cat.class).setProjection( Property.forName(name) ).add( Property.forName(color).eq(Color.BLACK) ).list();List results = session.createCriteria(Cat.class).setProjection( Projections.projectionList().add( Projections.rowCount().as(catCountByColor) ).add( Property.forName(weight).avg().as(avgWeight) ).add( Property.forName(weight).

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1