hibernate中的几个重要方法以及调用参照

上传人:x****育 文档编号:209740410 上传时间:2021-11-11 格式:PDF 页数:17 大小:163.66KB
返回 下载 相关 举报
hibernate中的几个重要方法以及调用参照_第1页
第1页 / 共17页
hibernate中的几个重要方法以及调用参照_第2页
第2页 / 共17页
hibernate中的几个重要方法以及调用参照_第3页
第3页 / 共17页
hibernate中的几个重要方法以及调用参照_第4页
第4页 / 共17页
hibernate中的几个重要方法以及调用参照_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《hibernate中的几个重要方法以及调用参照》由会员分享,可在线阅读,更多相关《hibernate中的几个重要方法以及调用参照(17页珍藏版)》请在金锄头文库上搜索。

1、Hibernate 查询首先介绍get() 和 load() 方法的区别 : get() 方法和 load() 方法的区别主要在于对二级缓存的使用上。load() 方法会使用二级缓存,而 get() 方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。get(): 如果在数据库中没有记录会返回空,get() 无论如何都会返回数据. load(): 如果数据库中没有记录会抛出异常,如果有数据返回的是一个代理对象。get() 方法默认不支持lazy( 延迟加载 )功能,而load 支持延迟加载get() 方法在查询不到数据时,返回null, 而 load 因为支持延迟加载,只有在使用对象

2、时才加载,所以如果数据库中不在数据load 会抛出异常 (org.hibernate.ObjectNotFoundException)。get() 和 load() 只根据主键查询,不能根据其它字段查询,如果想根据非主键查询,可以使用 HQLlist 和 iterator() 方法之间的区别:(N+1?) list() 方法在执行时,直接运行查询结果所需要的查询语句。iterator() 方法则是先执行得到对象ID 的查询,然后在根据每个ID 值去取得所要查询的对象。因此:对于list()方式的查询通常只会执行一个SQL 语句,而对于iterator() 方法的查询则可能需要执行 N+1 条

3、SQL 语句 (N 为结果集中的记录数). 结果集的处理方法不同: list() 方法会一次活的所有的结果集对象,而且他会依据查询的结果初始化所有的结果集对象。如果在结果集非常庞大的时候会占据非常多的内存,甚至会造成内存溢出的情况发生。iterator() 方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。一次在访问中可以控制缓存中对象的数量,以避免占用过多的缓存,导致内存溢出情况的发生。HQL:HQL是一种面向对象的查询语言,HQL 的操作对象是类、实例和属性等。SQL:sql 的操作对象是数据表和列等数据对象。Hql 是完全面向对象的查询语言,因此可以支持继承和

4、多条等特征。HQL 查询依赖于Query 类,每个Query 实例对应一个查询对象。定参数的功能,Query 接口才是真正的HQL 查询接口。/创建一个Query 对象Java 代码1.Query query = session.createQuery (from Customer as c where c.name=:customerName and c.age=:customerAge); /动态绑定参数Java 代码1.query.setString(customerName,Tom); 2.query.setInteger(customerAge,21); /执行查询语句,返回结果Ja

5、va 代码1.List result = query.list(); HQL 查询步骤 : 1:获取 Hibernate Session对象。2:编写 HQL 语句。3:以 HQL 语句作为参数,调用Session 的 createQuery方法创建查询对象。4:如果 HQL 语句包含参数,调用Query 的 setXXX() 方法为参数赋值。5: 调用 Query 对象的 list 等方法遍历查询结果。Query 还包含两个方法: Java 代码1.setFirstResult(int firstResult):/设置返回的结果集从第几条记录开始。2.setMaxResults(int ma

6、xResults):/设置本次查询返回的结果数。实体的删除和更新。投影查询:只查询属性的一部分。查询一个属性返回的是字符串查询二个字段返回的是数组动态构造查询:主要用于几十个表查询;要构建一个新的对象,要加上一个构造函数;在 new 对象的时候要加上包名不要使用count(*) 要 count( 持久化对象 ) 分组与排序 : Order by 子句可以通过asc 或 desc 关键字排序如: Java 代码1.form User u Order by u.name asc,u.age desc; Group by 子句与统计查询: 如: Java 代码1.String hql = selec

7、t count(u),u.age from User u group by u.age having count(u)10; 2. List list = session.createQuery(hql).list(); 标准的 SQL 聚合函数都可以在HQL 语句中使用,比如:count(),sum(),max(),min(),age()等连接查询 : 内连接 :inner join 左外连接 :left outer join 右外连接 :right outer join 全连接 :full join( 不常用 ) 迫切外连接 :left outer join fetch,left join

8、 fetch: 用于一次性获取连接数据,特别是集合数据。减少与数据库交互的次数。left out join :使用做外连接位于left join 左侧表的所有记录及对应的order 类的记录信息都将显示出来。right out join: 与 left out join 正好相反, right out join 返回的是 HQL 右侧表中的所有记录以及对应的 Customer对象记录信息。获取集合数据的四种方式: 1:Hibernate.initialize(user.getOrder(); 2:user.getOrder().size(); 3:左右迫切连接4:高级过滤器条件查询语句 (Cr

9、iteria Queries):利用对象进行对象查询。主要的接口有 :Criteria 、Criterion 和 expression_r和 Restrictions类组成。 能够支持在运行时动态生成SQL 语句。条件查询步骤:1:通过 seesion 的 CreateCriteria()方法,创建一个Criteria 对象2:设置查询对象,name 指对象的属性3:把查询条件添加到Criteria 对象中4:执行 list() 查询返回结果。条件查询通过三个类完成: Criteria: 代表一次查询 . Criterion: 代表一个查询条件. Restrictions: 产生查询条件的工具

10、类. 本地 sql 查询 :使用手写的SQL 来完成所有的createupdatedelete操作也包括存储过程本地 sql 步骤:1:通过 session 创建一个SqlQuery对象。2:编写 sql 语句3:以 SQL 语句作为参数,调用Session 的 createSQLQuery方法创建查询对象4:如果 SQL 语句包含参数,则调用Query 的 setXX 方法为参数赋值5:调用 SQLQuery对象的 addEntity或 addScalar方法,将选出的结果与实体或标量值关联. 如:HQL 的 sql Java 代码1.String sql = select c.c_id a

11、s c.id,c.c_name as c.name from CUSTOMER c where c.id = 1; 注意:如果使用*,表的别名和类的别名要一致Java 代码1.String sql1 = select c.* from CUSTOMER c where c.c_id=2 ; 如:条件查询的sql Java 代码1.SQLQuery query = session.createSQLQuery(sql); 2.query.addEntiy(c,Customer.class ); 多态查询:多态查询是指可以查询到当前类及所有子类的实例,HQL 和条件查询都支持多态查询。如:hql

12、语句查询出所有的持久化对象Java 代码1.Query query = session.createQuery(from java.lang.object); 2.System.out.println(query.list(); HQL 支持多态查询,多态查询是指查询出当前类及所有子类的实例,session.createQuery(from Employee); or session.createCriteria(Employee.class); 如果 Employee类有两个子类: HourlyEmployee和 SalariedEmployee,那么这个查询语句会查出所有的Employee

13、实例,以及HourlyEmployee类和 SalariedEmployee类的实例。Java 代码1.session.createQuery(from HourlyEmployee); 2.session.createCriteria(HourlyEmployee.class );/只检索子类查询结果集排序: Hql 与条件查询都支持查询结果集排序,只是 HQL 采用 Order by 关键字,而条件查询采用order类进行查询结果排序。分页查询:分页查询是数据库应用中常见的处理方式,Query 和 Criteia 接口都提供了用于分页查询的方法. Java 代码1.setFistResul

14、t(int): /指定从哪一个对象开始查询,参数是索引位置从0 开始。2.setMaxResults(int): /指定一次最多查询的对象数量。子查询 : 1:查询有一个订单以上的客户。如: Java 代码1.from Customer c where 1 1如果子查询返回多条记录,可以使用关键字量化: 1:all 2:any 3:some 4:in 5:exists 如: Java 代码1./ 返回所有订单价格小于100 的客户2.from Customer c where 100all(select o.price form c.orders o) 3./ 返回有一条订单的价格小于100

15、的客户4.from Customer c where 100any(select o.price from c.orders o) 5./ 返回有一条订单的价格等于100 的客户6.from Customer c where 100=some(select o.price from c.order o) 7.8./ 返回有一条订单的价格等于100 的客户9.from Customer c where 100 = any (select o.prive from c.orders o) 10. / 返回有一条订单的价格等于100 的客户11. from Customer c where 100

16、in (select o.price from c.orders o) 参数绑定 : 1:传统的 JDBC 的参数绑定如: Java 代码1.PrepareStatement pre = connection.prepare(select * from User where user.name = ?); 2.pre.setString(1,Zhao); 3.ResultSet rs = pre.executeQuery(); Hibernate 参数绑定:在hibernate 中有 4 种参数绑定方式1:按参数名称 (命名参数 )绑定,在语句中定义命名参数要用:开头2:按参数位置绑定3:Hql 查询中可以通过setParameter()方法绑定任意类型的参数4:setProperties()方法,将命名参数与一个对象的属性值绑定在一起如:参数 :开头Java 代码1.Query query = session.createQuery(from User user where user.name = customername and user.age = :customerage);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号