Hibernate框架的查询方式

1. 唯一标识OID的检索方式

* session.get(对象.class,OID)

2. 对象的导航的方式

3. HQL的检索方式

* Hibernate Query Language        -- Hibernate的查询语言

4. QBC的检索方式

* Query By Criteria        -- 条件查询

5. SQL检索方式(了解)

* 本地的SQL检索

 

**技术分析之HQL的查询方式概述**

1. HQL的介绍

* HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似

* 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式

2. HQL与SQL的关系

* HQL 查询语句是面向对象的,Hibernate负责解析HQL查询语句, 然后根据对象-关系映射文件中的映射信息, 把 HQL 查询语句翻译成相应的 SQL 语句.

* HQL 查询语句中的主体是域模型中的类及类的属性

* SQL 查询语句是与关系数据库绑定在一起的. SQL查询语句中的主体是数据库表及表的字段

 

***查询策略***

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框架都采用了默认值,开发中基本上使用的都是默认值。特殊的情况。

 

**技术分析之在man-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值