Hibernate 的查询方式
1.对象导航查询
2. 对象导航查询
3.hql 查询
查询所有
条件查询
排序查询
分页查询
投影查询
聚集函数查询
4.qbc查询
查询所有
条件查询
排序查询
分页查询
统计查询
5.hql 多表查询
(1) mysql 多表查询回顾
(2) hql 多表查询
6 hibernate 的检索策略
(1)概念
(2) 具体操作
Hibernate 查询方式:
1.对象导航查询
(1)根据id 查询某个客户 ,再查询这个客户里面所有的联系人.
- OID导航查询
(1) 根据id 查询某一条记录,返回对象
3.hql 查询
(1) Query 对象,写hql 语句实现查询
4 .qbc查询
(1) Creteria 对象
5.本地SQL查询
(1) SQLQuery 对象 ,使用普通SQL实现查询
对象导航查询
1.查询某个客户里面所有联系人过程,使用对象导航实现
3. 代码
4. OID导航查询
根据id 查询某一条记录,返回对象
(1) 调用session 里面的get方法实现
HQL 查询
hql :hibernate query language,hibernate 提供一种查询语言,hql 语言与普通sql 很相似.
区别: 普通sql 操作数据库和字,hql操作的是实体类和属性.
. 常用的hql 语句
(1) 查询所有: from 实体类名称
(2) 条件查询: from 实体类名称 where 属性名称=?
(3) 排序查询: from 实体类名称 order by 实体类属性名称 asc/desc
使用hql 操作时候使用Query 对象
(1) 创建Query 对象,写hql 语句
(2) 调用query 对象里面的方法得到结果.
2.查询所有:from 实体类名称
条件查询
5. hql 条件查询语句写法:
常用的hql
(1) from 实体类名称 where 实体类属性名称=? and 实体类属性名称=?
from 实体类名称 where 实体类属性名称like ?
2.代码:
模糊查询
排序查询
6. hql 排序语句语法
(1) from 实体类名称 order by 实体类属性名称 asc/desc
分页查询
7. mysql 实现查询
(1) 使用关键字limit 实现
(2) hql 中实现分页
(1) hql 操作中,在语句里面不能写limit ,hibernate的Query 对象封装两个方法实现分页操作
投影查询
1.投影查询: 查询不是所有字段,而是部分字段的值
2.投影查询的HQL 语句写法
(1)select 实体类属性名称1,实体类属性2 from 实体类名称
(2) select 后面不能写 * 不支持
代码实现
聚集函数查询
1. 常用的聚集函数
(1) count ,sun,avg,max,min
2.hql 聚集函数语句写法
查询表记录数
select count(*) from
不能直接强转为int 类型负负责会类型转换异常
QBC 查询
1.使用hql 查询需要写hql 语句实现 ,但是使用qbc时候不需要写语句了,使用方法实现
2. 使用qbc时候,操作实体类和属性
3. 使用qbc, 使用Criteria对象
查询所有
1 创建Criteria对象
2.调用方法得到结果
**条件查询 **
qbc当中的方法
-
没有语句书写 ,使用的封装方法实现
** 排序查询 **
** 分页查询 **
开始位置公式: (当前页 -1) * 每页记录数
** 统计查询 **
**离线查询 ** -
servlet 调用service ,service 调用dao
(1) 在dao 里面对数据库进行CRUD 操作
(2) 在dao 里面使用的是hibernate 框架,使用hinernate 框架时候,调用session 里面的方法实现功能.
HQL 多表查询
MySQL多表查询
1.内连接
2.左外连接
3.右外连接
HQL实现多表查询
Hql多表查询
(1) 内连接
内连接查询hql 语句写法:以客户和联系人为例:
(1) from Customer c inner join c.SetLinkMan
返回list, list里面每部分是数组形式
-
演示迫切内连接
(1)内连接和迫切内连接连接底层实现一样的
(2)区别:使用内连接返回list 中每部分是数组,迫切内连接返回list每部分是对象
(3) hql 语句写法
from Customer c inner join fetch c.SetLinkMan
(2)左外连接
左外连接hql 语句
(1) from Customer c inner left outer join c.SetLinkMan
迫切左外连接
(2) from Customer c left outer join feach c.SetLinkMan
左外连接返回list 中每部分返回的是数组
迫切左外连接返回 list 中每部分返回的是对象
(3)右外连接
右边连接hql 语句
from Customer c right left outer join c.SetLinkMan
迫切右外连接
from Customer c right left outer join feach c.SetLinkMan
Hibernate 检索策略
检索策略的概念
1.hibernate 检索策略分为两类:
(1) 立即查询: 根据id查询,调用Get方法,一调用get 方法马上发送语句查询查询数据库.
代码:
(2) 延迟查询: 根据id 查询,还有load方法,调用load方法,不会马上发送查询数据,只要得到对象里面的值时候才会发送语句查询数据库
代码:
2.延迟查询
(1) 类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句.
(2) 关联级别延迟:查询除某个客户,再查询这个客户的所有联系人.查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟.
检索策略set 的lazy 和feach 属性
关联级别延迟操作
1.在映射文件中配置实现
(1)根据客户得到的联系人,在客户映射文件中配置
2.在Set 标签上使用属性
(1) feach : 值 select(默认)
(2) lazy: 值
-true :延迟(默认)
-false:不延迟
-exsra 极其延迟
(1)调用get之后,发送两条SQL语句
(1) 及其懒惰,要什么值给什么值
批量抓取
1.查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人
(1)上面操作的代码,会多次发送SQL语句
2.在客户映射文件中,Set 标签配置
(1) batch-size 值,值越大发送语句越少