hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

HQL多表查询
Mysql里面多表查询
1、内连接
/*内连接查询*/
SELECT*EROM t customer c,t linkman 1 WHERE c.cid=1.clid SELECT*FROM t customer c INNER JoIN t linkman 1 oN c.cid=l.clid
2、左外连接
/*左外连接*/
SELECT*FROM t customir c IEFT OUTER JoINt 1inkman 1 oN c.cid=l.clid
3、右外连接
/*右外连接*/
SELECT*FROM t_customer c RIGHT OUTER JOIN t_1inkman 1 oN c.cid=l.clid

HQL实现多表查询
Hql多表查询
(1)内连接

(1)from Customer c inner join c.setLinkMan
//1创建query对象
Query query=session.createQuery("from Customer c inner join c.setLinkMan");List list=query.list();

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

(2)左外连接

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

(3)右外连接

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

(4)迫切内连接

(1)迫切内连接和内连接底层实现一样的。
(2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

 hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

Hibernate 检索策略
1、hibernate 检索策略分为两类:
(1)立即查询根据id查询,调用get方法,一调用get方法马上发送语句查询数据库

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

(2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库

 hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

2、延迟查询分成两类:
(1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
(2)关联级别延识:查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

关联级别延迟操作
1、在映射文件中进行配置实现

(1)根据客户得到所有的联系人,在客户映射文件中配置2在set标签上使用属性

  • fetch:值select(默认)
  • lazy:值

-true:延迟(默认)
-false:不延迟
-extra:极其延迟

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

批量抓取
1、普通方法(效率不高)

查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】

2、高效率方法,设置映射文件,batch-size越大效率越高

hibernate4+查询【HQL多表查询、Mysql里面多表查询、Hibernate 检索策略(立即查询、延迟查询)、关联级别延迟操作、批量抓取】