Hibernate5(2016)——查询

1.Hibernate查询方式:

1 对象导航查询

根据id查某个客户,再查询这个客户里面所有的联系人

2 OID查询

根据id查询某一条记录,返回对象

3 hql查询

Query对象,写hql语句实现查询

4 QBC查询

Criteria对象

5 本地sql查询

SQLQuery对象,使用普通sql实现查

2.对象导航查询:

1 查询某个客户里面所有联系人过程,使用对象导航实现

2 代码

Hibernate5(2016)——查询_第1张图片

3.OID查询:

1 根据id查询记录

调用session里面的get方法实现

4.HQL查询:

1 hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通的sql语言相似,区别:普通sql语言操作数据库和字段,hql语言操作实体类和属性

2 常用的hql语句

查询所有:from 实体类名称

条件查询:from 实体类名称 where 实体类属性名称=? And 实体类属性名称=?

条件查询:from 实体类名称 where 实体类属性名称 like ?(模糊查询)

排序查询:from 实体类名称 order by 实体类属性名称 asc/desc

3 使用hql查询操作时候,使用Query对象

创建Query对象,写hql语句

调用query对象里面的方法得到结果

4.1 查询所有:

1 查询所有客户记录

创建Query对象,写hql语句

调用query对象里面的方法得到结果

2 查询所有:from 实体类名称

Hibernate5(2016)——查询_第2张图片

4.2 条件查询:

1 hql条件查询语句写法:

from 实体类名称 where 实体类属性名称=? And 实体类属性名称=?

from 实体类名称 where 实体类属性名称 like ?(模糊查询)

2 代码

Hibernate5(2016)——查询_第3张图片

3 模糊查询

Hibernate5(2016)——查询_第4张图片

4.3 排序查询:

1 hql 排序语句写法

from 实体类名称 order by 实体类属性名称 asc/desc

4.4 分页查询:

1 mysql实现分页

使用关键字limit实现

2 在hql中实现分页

在hql操作中,在语句中不能写limit,hibernate的Query对象封装了两个方法实现分页操作

Hibernate5(2016)——查询_第5张图片

4.5 投影查询:

1 投影查询:查询的不是所有字段的值,而是部分字段的值

2 投影查询hql语句写法

select 实体类属性名称1,实体类属性名称2 from 实体类名称

select后面不能写*,不支持

3 具体实现

4.6 聚集函数使用:

1 常用的聚集函数

count、sum(+)、avg(平均数)、max、min

2 hql聚集函数语句写法

查询表记录数

-select count(*) from 实体类名称

Hibernate5(2016)——查询_第6张图片

5.QBC查询:

1 使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现

2 使用qbc时候,操作实体类和属性

3 使用qbc时候,使用Criteria对象实现

5.1 查询所有:

1 创建Criteria对象

2 调用方法得到结果

Hibernate5(2016)——查询_第7张图片

5.2 条件查询:

Hibernate5(2016)——查询_第8张图片

1 没有语句,使用封装的方法实现

Hibernate5(2016)——查询_第9张图片

5.3 排序查询:

Hibernate5(2016)——查询_第10张图片

5.4 分页查询:

开始位置计算公式:(当前页-1)*每页记录数

Hibernate5(2016)——查询_第11张图片

5.5 统计查询:

Hibernate5(2016)——查询_第12张图片

5.6 离线查询:

1 servlet调用service,service调用dao

在dao里面对数据库crud操作

在dao里面使用hibernate框架,使用hibernate时候,调用session里面的方法实现功能

Hibernate5(2016)——查询_第13张图片

6.HQL多表查询:

6.1 Mysql里面多表查询:

Hibernate5(2016)——查询_第14张图片

6.2 HQL中实现多表查询:

Hql多表查询

内连接

左外连接

右外连接

迫切内连接

迫切左外连接

6.3 HQL内连接:

1 内连接查询hql语句写法:以客户和联系人为例

from  Customer  c  inner  join  c.setLinkMan

Hibernate5(2016)——查询_第15张图片

返回list,list里面每部分是数组形式

2 演示迫切内连接

迫切内连接和内连接底层实现一样的

区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象

Hql语句写法:from  Customer  c  inner  join  fetch  c.setLinkMan

Hibernate5(2016)——查询_第16张图片

6.4 HQL左外连接:

1 左外连接hql语句:

from  Customer  c  left  outer  join  c.setLinkMan

迫切左外连接from  Customer  c  left  outer  join  fetch  c.setLinkMan

2 左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象

Hibernate5(2016)——查询_第17张图片

3 右外连接hql语句:

from  Customer  c  right  outer  join  c.setLinkMan

7.Hibernate检索策略:

7.1 检索策略的概念:

1 hibernate检索策略分为两类:

立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库

Hibernate5(2016)——查询_第18张图片

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

Hibernate5(2016)——查询_第19张图片

2 延迟查询分为两类

类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句

关联级别延迟:

-查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟

Hibernate5(2016)——查询_第20张图片

7.2 关联级别延迟操作:

1 在映射文件中进行配置实现

根据客户得到所有的联系人,在客户映射文件中配置

Hibernate5(2016)——查询_第21张图片

2 在set标签上使用属性

Fetch:值select(默认)

Lazy:值

-true:延迟(默认)

-false:不延迟

-extra:极其延迟

Hibernate5(2016)——查询_第22张图片

调用get之后,发送两条sql语句

Hibernate5(2016)——查询_第23张图片

极其懒惰,要什么值给什么值

Hibernate5(2016)——查询_第24张图片

7.3 批量抓取:

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

上面操作代码,发送多条语句

Hibernate5(2016)——查询_第25张图片

2 在客户的映射文件中,set标签配置

batch-size值,值越大发送语句越少

 

你可能感兴趣的:(Hibernate5(2016)——查询)