1 对象导航查询
根据id查某个客户,再查询这个客户里面所有的联系人
2 OID查询
根据id查询某一条记录,返回对象
3 hql查询
Query对象,写hql语句实现查询
4 QBC查询
Criteria对象
5 本地sql查询
SQLQuery对象,使用普通sql实现查
1 查询某个客户里面所有联系人过程,使用对象导航实现
2 代码
1 根据id查询记录
调用session里面的get方法实现
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对象里面的方法得到结果
1 查询所有客户记录
创建Query对象,写hql语句
调用query对象里面的方法得到结果
2 查询所有:from 实体类名称
1 hql条件查询语句写法:
from 实体类名称 where 实体类属性名称=? And 实体类属性名称=?
from 实体类名称 where 实体类属性名称 like ?(模糊查询)
2 代码
3 模糊查询
1 hql 排序语句写法
from 实体类名称 order by 实体类属性名称 asc/desc
1 mysql实现分页
使用关键字limit实现
2 在hql中实现分页
在hql操作中,在语句中不能写limit,hibernate的Query对象封装了两个方法实现分页操作
1 投影查询:查询的不是所有字段的值,而是部分字段的值
2 投影查询hql语句写法
select 实体类属性名称1,实体类属性名称2 from 实体类名称
select后面不能写*,不支持
3 具体实现
1 常用的聚集函数
count、sum(+)、avg(平均数)、max、min
2 hql聚集函数语句写法
查询表记录数
-select count(*) from 实体类名称
1 使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现
2 使用qbc时候,操作实体类和属性
3 使用qbc时候,使用Criteria对象实现
1 创建Criteria对象
2 调用方法得到结果
1 没有语句,使用封装的方法实现
开始位置计算公式:(当前页-1)*每页记录数
1 servlet调用service,service调用dao
在dao里面对数据库crud操作
在dao里面使用hibernate框架,使用hibernate时候,调用session里面的方法实现功能
Hql多表查询
内连接
左外连接
右外连接
迫切内连接
迫切左外连接
1 内连接查询hql语句写法:以客户和联系人为例
from Customer c inner join c.setLinkMan
返回list,list里面每部分是数组形式
2 演示迫切内连接
迫切内连接和内连接底层实现一样的
区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象
Hql语句写法:from Customer c inner join fetch c.setLinkMan
1 左外连接hql语句:
from Customer c left outer join c.setLinkMan
迫切左外连接from Customer c left outer join fetch c.setLinkMan
2 左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象
3 右外连接hql语句:
from Customer c right outer join c.setLinkMan
1 hibernate检索策略分为两类:
立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据库,只有得到对象里面的值时候才会发送语句查询数据库
2 延迟查询分为两类
类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
关联级别延迟:
-查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟
1 在映射文件中进行配置实现
根据客户得到所有的联系人,在客户映射文件中配置
2 在set标签上使用属性
Fetch:值select(默认)
Lazy:值
-true:延迟(默认)
-false:不延迟
-extra:极其延迟
调用get之后,发送两条sql语句
极其懒惰,要什么值给什么值
1 查询所有客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人
上面操作代码,发送多条语句
2 在客户的映射文件中,set标签配置
batch-size值,值越大发送语句越少