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的结果集映射到持久化对象图中)。