简述Hibernate部分查询语句

Hibernate配备了一种非常强大的Hibernate查询语句,这种语言看上去很像SQL。本文主要介绍select子句、聚集函数、多态查询。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

景谷网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

1. select子句

select 子句选择将哪些对象与属性返 回到查询结果集中. 考虑如下情况:

 
 
 
  1. select mate 
  2. from Cat as cat 
  3.     inner join cat.mate as mate

该语句将选择mates of other Cats。(其他猫的配偶) 实际上, 你可以更简洁的用以下的查询语句表达相同的含义:

 
 
 
  1. select cat.mate from Cat cat

Hibernate查询语句可以返回值为任何类型的属性,包括返回类型为某种组件(Component)的属性:

 
 
 
  1. select cat.name from DomesticCat cat
  2. where cat.name like 'fri%'
  3. select cust.name.firstName from Customer as cust

Hibernate查询语句可以返回多个对象和(或)属性,存放在 Object[]队列中,

 
 
 
  1. select mother, offspr, mate.name 
  2. from DomesticCat as mother
  3.     inner join mother.mate as mate
  4.     left outer join mother.kittens as offspr

或存放在一个List对象中,

 
 
 
  1. select new list(mother, offspr, mate.name)
  2. from DomesticCat as mother
  3.     inner join mother.mate as mate
  4.     left outer join mother.kittens as offspr

也可能直接返回一个实际的类型安全的Java对象,

 
 
 
  1. select new Family(mother, mate, offspr)
  2. from DomesticCat as mother
  3.     join mother.mate as mate
  4.     left join mother.kittens as offspr

假设类Family有一个合适的构造函数.

你可以使用关键字as给“被选择了的表达式”指派别名:

 
 
 
  1. select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
  2. from Cat cat

这种做法在与子句select new map一起使用时最有用:

 
 
 
  1. select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
  2. from Cat cat

该Hibernate查询语句返回了一个Map的对象,内容是别名与被选择的值组成的名-值映射。

3. 聚集函数

HQL查询甚至可以返回作用于属性之上的聚集函数的计算结果:

 
 
 
  1. select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
  2. from Cat cat

受支持的聚集函数如下:

 
 
 
  1. avg(...), sum(...), min(...), max(...) 
  2. count(*) 
  3. count(...), count(distinct ...), count(all...) 

你可以在选择子句中使用数学操作符、连接以及经过验证的SQL函数:

 
 
 
  1. select cat.weight + sum(kitten.weight) 
  2. from Cat cat 
  3.     join cat.kittens kitten
  4. group by cat.id, cat.weight
  5. select firstName||' '||initial||' '||upper(lastName) from Person

关键字distinct与all 也可以使用,它们具有与SQL相同的语义.

 
 
 
  1. select distinct cat.name from Cat cat
  2. select count(distinct cat.name), count(cat) from Cat cat

3. 多态查询

一个如下的Hibernate查询语句:

 
 
 
  1. from Cat as cat

不仅返回Cat类的实例, 也同时返回子类 DomesticCat的实例. Hibernate 可以在from子句中指定任何 Java 类或接口. 查询会返回继承了该类的所有持久化子类 的实例或返回声明了该接口的所有持久化类的实例。下面的查询语句返回所有的被持久化的对象:

 
 
 
  1. from java.lang.Object o

接口Named 可能被各种各样的持久化类声明:

 
 
 
  1. from Named n, Named m where n.name = m.name

注意:***的两个查询将需要超过一个的SQL SELECT.这表明order by子句 没有对整个结果集进行正确的排序. (这也说明你不能对这样的查询使用Query.scroll()方法.)

本文名称:简述Hibernate部分查询语句
网站URL:http://www.shufengxianlan.com/qtweb/news16/85266.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联