Hibernate框架对查询功能优化(2)

1. 查询策略:使用Hibernate查询一个对象的时候,查询其关联对象.应该如何查询.是Hibernate的一种优化手段!!!

2. Hibernate框架的检索策略解决的问题

   * 查询的时机

      Customer c1 = (Customer) session.get(Customer.class, 1);

      System.out.println(c1.getLinkmans().size());

      * lazy属性解决查询的时机的问题,需要配置是否采用延迟加载!!

   * 查询的语句形式

      List<Customer> list = session.createQuery("from Customer").list();

      for(Customer c : list){

        System.out.println(c.getLinkmans()); }

   * fetch属性就可以解决查询语句的形式的问题!!

set标签上配置策略

 1. 在<set>标签上使用fetch和lazy属性

  * fetch的取值 -- 控制SQL语句生成的格式

    * select -- 默认值.发送查询语句

    * join -- 连接查询.发送的是一条迫切左外连接!!!配置了join.lazy就失效了

    * subselect -- 子查询.发送一条子查询查询其关联对象.(需要使用list()方法进行测试)

  * lazy的取值 -- 查找关联对象的时候是否采用延迟!

    * true -- 默认.延迟

    * false -- 不延迟

    * extra -- 及其懒惰, 查询关联对象的时候 采用比延迟加载更懒惰的方式进行查询.

2. set标签上的默认值是fetch="select"和lazy="true"

3. 总结:Hibernate框架都采用了默认值,开发中基本上使用的都是默认值。特殊的情况。

  many-to-one标签上配置策略

 1. 在<many-to-one>标签上使用fetch和lazy属性

   * fetch的取值 -- 控制SQL的格式.

    * select -- 默认。发送基本select语句查询

    * join -- 发送迫切左外连接查询

  * lazy的取值 -- 控制加载关联对象是否采用延迟.

    * false -- 不采用延迟加载.

    * proxy -- 默认值.代理.现在是否采用延迟.

      * 由另一端的<class>上的lazy确定.如果这端的class上的lazy=”true”.proxy的值就是true(延迟加载).

      * 如果class上lazy=”false”.proxy的值就是false(不采用延迟.)

 2. 在<many-to-one>标签上的默认值是fetch="select"和proxy

时间: 2024-11-06 12:07:07

Hibernate框架对查询功能优化(2)的相关文章

Hibernate框架对查询功能优化(1)

延迟加载 1. 延迟加载先获取到代理对象,当真正使用到该对象中的属性的时候,才会发送SQL语句,是Hibernate框架提升性能的方式 2. 类级别的延迟加载 * Session对象的load方法默认就是延迟加载 * Customer c = session.load(Customer.class, 1L);没有发送SQL语句,当使用该对象 的属性时,才发送SQL语句 * 使类级别的延迟加载失效 * 在对象映射文件中<class>标签上配置lazy="false" * Hi

hibernate框架之-查询结果集返回类型

Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addEntity方法,将查询结果转换为映射的对象.后来需求变更,需要查询另外几个表的若干字段,不想继续用addEntity绑定新加的表(毕竟只有几个字段需要查询出来,将多余的字段都转换成映射对象,或只将需查询的字段转换为映射对象,从维护角度来说似乎都不太好),网上查了查:于是在addEntity后再使用a

二、框架学习 (一)Hibernate框架学习 (2)Hibernate概念和api使用

目录 1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) 正文 实体类编写规则 1 实体类里面属性是私有的 2 私有属性使用公开的set和get方法操作. 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的

Android数据库hibernate框架

说明 /** * YDL_Hibernate总结 <br/> * (一)支持功能: 1.自己主动建表,支持属性来自继承类:可依据注解自己主动完毕建表,而且对于继承类中的注解字段也支持自己主动建表. 2.自己主动支持增删改 * ,增改支持对象化操作:增删改是数据库操作的最基本单元,不用反复写这些增删改的代码,而且加入和更新支持相似于hibernate中的对象化操作. * 3.查询方式灵活:支持android框架提供的方式,也支持原生sql方式. * 4.查询结果对象化:对于查询结果可自己主动包装

一级缓存 ---- Hibernate框架学习

叙:hibernate中有一个特色,即,hibernate的持久态能自动更新数据库,不需要手动设置更新操作代码,而持久态的这一特色所依据的便是hibernate的一级缓存技术.那么之前学过了hibernate的三态,现在学习一下一级缓存: hibernate的一级缓存 首先,要明白什么是缓存: 什么是缓存? 缓存:一种优化方式,将数据存储在本地,当使用到保存的数据时不必再向服务器或者终端进行请求数据的操作,直接读取本地数据即可. 然后现在了解一下hibernate的缓存: hibernate缓存

Hibernate框架第二天

### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类. * 持久化类 = JavaBean + xxx.hbm.xml ---------- **持久化类的编写规则** 1. 提供一个无参数 public访问控制符的构造器 -- 底层需要进行反射. 2. 提供一个标识属性,映射数据表主键字段 -- 唯一标识OID.数据库中通过主键.Java

Hibernate框架之HQL查询与Criteria 查询的区别

Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: /* * 查询所有房屋 * * (non-Javadoc) * @see Dao.HouseDao#selecthouse() */ public List<House> selecthouse() { // TODO Auto-generated method stub //获取连接 Sess

Hibernate框架查询方式

1. 唯一标识OID的检索方式 * session.get(对象.class,OID) 2. 对象的导航的方式 public class Demo { /** * 演示对象导航的方式 */ @Test public void run1() { Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); //先查询1号客户通过OID查询 Customer cus

用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能(二)

前一篇写的有些多,大家先看前一篇,传送门 具体的资源已将上传到资源了. 附地址:MySQL.zip启动 用Maven整合SpringMVC+Spring+Hibernate 框架 上文我们直接搭建前的准备和资源配置都写好了,下面进入具体代码编写.承接上文的小3 3.我习惯建立接口,这样对整个项目感觉更合理. (1.)建立IBaseService(业务逻辑层,有的习惯写成BaseServiceI)都可以,都是标注接口的,我只是简单的贴下代码 package com.jesus.sshframewo