Hibernate配备了一种非常强大的Hibernate查询语句,这种语言看上去很像SQL。本文主要介绍select子句、聚集函数、多态查询。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。
景谷网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
1. select子句
select 子句选择将哪些对象与属性返 回到查询结果集中. 考虑如下情况:
- select mate
- from Cat as cat
- inner join cat.mate as mate
该语句将选择mates of other Cats。(其他猫的配偶) 实际上, 你可以更简洁的用以下的查询语句表达相同的含义:
- select cat.mate from Cat cat
Hibernate查询语句可以返回值为任何类型的属性,包括返回类型为某种组件(Component)的属性:
- select cat.name from DomesticCat cat
- where cat.name like 'fri%'
- select cust.name.firstName from Customer as cust
Hibernate查询语句可以返回多个对象和(或)属性,存放在 Object[]队列中,
- select mother, offspr, mate.name
- from DomesticCat as mother
- inner join mother.mate as mate
- left outer join mother.kittens as offspr
或存放在一个List对象中,
- select new list(mother, offspr, mate.name)
- from DomesticCat as mother
- inner join mother.mate as mate
- left outer join mother.kittens as offspr
也可能直接返回一个实际的类型安全的Java对象,
- select new Family(mother, mate, offspr)
- from DomesticCat as mother
- join mother.mate as mate
- left join mother.kittens as offspr
假设类Family有一个合适的构造函数.
你可以使用关键字as给“被选择了的表达式”指派别名:
- select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
- from Cat cat
这种做法在与子句select new map一起使用时最有用:
- select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
- from Cat cat
该Hibernate查询语句返回了一个Map的对象,内容是别名与被选择的值组成的名-值映射。
3. 聚集函数
HQL查询甚至可以返回作用于属性之上的聚集函数的计算结果:
- select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
- from Cat cat
受支持的聚集函数如下:
- avg(...), sum(...), min(...), max(...)
- count(*)
- count(...), count(distinct ...), count(all...)
你可以在选择子句中使用数学操作符、连接以及经过验证的SQL函数:
- select cat.weight + sum(kitten.weight)
- from Cat cat
- join cat.kittens kitten
- group by cat.id, cat.weight
- select firstName||' '||initial||' '||upper(lastName) from Person
关键字distinct与all 也可以使用,它们具有与SQL相同的语义.
- select distinct cat.name from Cat cat
- select count(distinct cat.name), count(cat) from Cat cat
3. 多态查询
一个如下的Hibernate查询语句:
- from Cat as cat
不仅返回Cat类的实例, 也同时返回子类 DomesticCat的实例. Hibernate 可以在from子句中指定任何 Java 类或接口. 查询会返回继承了该类的所有持久化子类 的实例或返回声明了该接口的所有持久化类的实例。下面的查询语句返回所有的被持久化的对象:
- from java.lang.Object o
接口Named 可能被各种各样的持久化类声明:
- 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。内容未经允许不得转载,或转载时需注明来源: 创新互联