Hibernate的优化抓取和高速缓存(未完)

优化抓取和高速缓存

1. 对象获取方法: 

导航对象图,从一个已经加载的对象开始,通过如User.getAddress().getCity()等属性访问方法访问被关联的对象。

通过标识符获取,当一个对象的唯一标识符值已知时,这是最方便的方法

HQL(Hibernate Query Language,  Hibernate查询语言),它是一种完全面向对象的查询语言。Java QL(Java Persistence query language, JPA持久化查询语言)是HQL的一个标准子集。

Query q = session.createQuery(“from User as u where u.firstname = :first”);

q.setString(“fname”,”John”);

List result = q.list();                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

HQL常用于对象获取,而不是更新、插入或者删除数据,对象状态同步是持久化管理器的工作,而不是开发人员的工作。HQL除了查询更有一个高级的特性,例如:

1. 对按引用相关或者处于集合中的被关联对象的属性,应用限制能力(用查询语言导航对象图)

2. 只获取一个或者多个实体的属性的能力,没有加载实体本身到持久化上下文的系统开销。有时这被称作报告查询,更准确的称呼是投影。

3. 对查询结果进行排序的能力。

4. 对查询结果进行分页的能力。

5. 与group by、having和聚集函数(如sum、min和max/min)联合使用。

6. 当每一行获取多个对象时使用外部联结。

7. 调用标准的和用户定义的SQL函数的能力。

8. 子查询(嵌套查询)。

Hibernate Criteria接口,它提供了一种类型安全和面向对象的方式来查询,而不需要进行字符串操作。

1. 按条件查询. Hibernate的条件查询(Query By Criteria, QBC)API允许查询在运行时通过criteria对象的操作进行创建。

Criteria criteria = session.createCriteria(User.class);

Criteria.add(Restrictions.like(“firstname”, “John”);

List result = criteria.list();

2. 按示例查询,作为Criteria工具的一部分,Hibernate支持按示例查询(Query By Example, QBE).查询思想是,应用程序通过某些属性设置,提供被查询类的实例。查询结果返回带有匹配属性值的所有持久化实例。

Criteria criteria = session.createCriteria(User.class);

User exampleUser = new User();

exampleUser.setFirstname(“john”);

criteria.add(Example.create(exampleUser));

criteria.add(Restricitions.isNotNull(“homeAddress.city”));

List result = criteria.list();

原生的SQL查询,包括存储过程的调用(在这里Hibernate仍然把JDBC的结果集映射到持久化对象图中)。


猜你喜欢

转载自yaofeng911.iteye.com/blog/1068588