Hibernate总结2

查询:

Hibernate支持三种查询方式

1hql

2)条件查询Criteria,Query

3)原始sql

 

hql查询

它全称Hibernate Qusery Language HQL是面向对象的(OO)的. HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

注意:大小写敏感。

(1)    from子句

        i.      查询所有

1.   session.createQuery("from Person");

       ii.      查询单条数据

1.   有两种方式取值:

2.   先得到一个Query对象实例

a)   query.uniqueResult()

b)   query.list().get(0)

3.   查询具体表中某些字段数据

a)   session.createQuery("select name,age from Person");

4.   它返回的List 集合,元素是数组对象。

(2)    关联(Association)与连接(Join)

inner join(内连接),可以简写为join

left outer join(左外连接) ,可以简写为left join

right outer join(右外连接) , 可以简写为right  join

full join (全连接,并不常用)

(3)    聚集函数

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

select avg(Person.weight), sum(Person.weight), max(Person.weight), count(Person) from Person person

(4)    多态查询

一个如下的查询语句:

from Person person

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

(5)    where子句

where子句允许你将返回的实例列表的范围缩小. 如果没有指定别名,你可以使用属性名来直接引用属性:

(6)    表达式

where子句中允许使用的表达式包括 大多数你可以在SQL使用的表达式种类:

(7)    order by子句

查询返回的列表(list)可以按照一个返回的类或组件(components)中的任何属性(property)进行排序:

 

可选的ascdesc关键字指明了按照升序或降序进行排序.

(8)    group by子句

一个返回聚集值(aggregate values)的查询可以按照一个返回的类或组件(components)中的任何属性(property)进行分组:having子句在这里也允许使用.

(9)    子查询

对于支持子查询的数据库,Hibernate支持在查询中使用子查询。一个子查询必须被圆括号包围起来(经常是SQL聚集函数的圆括号)。 甚至相互关联的子查询(引用到外部查询中的别名的子查询)也是允许的。

CriteriaQBCC指的就是Criteria

它是一个接口,它的使用比hql要容易的多。Criteria接口与DetachedCriteria。

离线操作:就是当请求和数据库断开连接的时候,DetachedCriteria也可以操作。它不需要借助Session来创建,而是直接用。

 

离线操作:即便是数据库连接中断也能进行数据操作。

(二者的区别就是DetachedCriteria可以离线操作,而Criteria不可以)

 

带条件查询:用到Restrictions 对象,该对象用于添加约束。Person为一个POJO类。

 

 

模板查询(QBE,E就是指Example

也是一种查询方式,比较常用,是允许通过给对象设值来查询。

例子:

 

 

使用聚集函数:用到 Projections这个投影类,里面包含了对聚集函数操作,返回的结果可用uniqueResult() 取得.

 

 

结果集排序:Order对象来操作,里面包含了升序,降序的方法。

 

原始的SQL

使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上。使用命名的SQL查询还可以将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。

 

对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。

 

 

命名SQL查询

 

可以将SQL语句不放在程序中,而放在配置文件中,这种方式以松耦合的方式配置SQL语句,可从而降低耦合。

Hibernate的映射文件中定义查询名,然后确定查询所用的SQL语句,然后就可以直接调用该命名SQL查询。在这种情况下,不需要调用addEntity()方法,因为在配置命名SQL查询时,已经完成了查询结果与实体的关联。

 

在配置文件里配置

调用

             

Hibernate 3引入了对存储过程查询(stored procedure)和函数(function)的支持.以下的说明中,这二者一般都适用。 存储过程/函数必须返回一个结果集,作为Hibernate能够使用的第一个外部参数. 下面是一个Oracle9和更高版本的存储过程例子.

 

创建一个存储过程

配置

 

使用Query接口或Criteria接口实现分页

 

  setFirstResult(),设置返回结果集的起始点。

  setMaxResults(),设置查询获取的最大记录数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值