Hibernate_day04
来源:互联网 发布:淘宝网买家信用 编辑:程序博客网 时间:2024/06/08 18:27
Hibernate_day04
上节内容
1表与表之间关系回顾
(1)一对多(客户和联系人)
(2)多对多(用户和角色)
2hibernate一对多操作
(1)一对多映射配置
(2)一对多级联保存
(3)一对多级联删除
(4)inverse属性
3hibernate多对多操作
(1)多对多映射配置
(2)多对多级联保存(重点)
(3)多对多级联删除(了解)
(4)维护第三张表
今天内容
1hibernate的查询方式
2对象导航查询
3hql查询
(1)查询所有
(2)条件查询
(3)排序查询
(4)分页查询
(5)投影查询
(6)聚集函数使用
4qbc查询
(1)查询所有
(2)条件查询
(3)排序查询
(4)分页查询
(5)统计查询
(6)离线查询
5hql多表查询
(1)mysql多表查询回顾
(2)hql多表查询
-内连接、迫切内连接、左外连接、迫切左外连接、右外连接
6hibernate的检索策略
(1)概念
-hibernate分成:立即和延迟查询
-延迟查询分成:类级别和关联级别延迟
(2)具体操作
Hibernate查询方式
1对象导航查询
(1)根据id查询某个客户,再查询这个客户里面所有的联系人
2OID查询
(1)根据id查询某一条记录,返回对象
3HQL查询
(1)Query对象,写hql语句实现查询
4QBC查询
(1)Criteria对象
5本地sql查询
(1)SQLQuery对象,使用普通sql实现查询
对象导航查询
1查询某个客户里面所有联系人过程,使用对象导航实现
2代码
OID查询
1根据id查询记录
(1)调用session里面的get方法实现
HQL查询
1hql:hibernatequerylanguage,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性
2常用的hql语句
(1)查询所有:from实体类名称
(2)条件查询:from实体类名称where属性名称=?
(3)排序查询:from实体类名称orderby实体类属性名称asc/desc
3使用hql查询操作时候,使用Query对象
(1)创建Query对象,写hql语句
(2)调用query对象里面的方法得到结果
查询所有
1查询所有客户记录
(1)创建Query对象,写hql语句
(2)调用query对象里面的方法得到结果
2查询所有:from实体类名称
条件查询
1hql条件查询语句写法:
(1)from 实体类名称where实体类属性名称=?and实体类属性名称=?
from实体类名称where实体类属性名称like?
2代码
模糊查询
排序查询
1hql排序语句写法
(1)from实体类名称orderby实体类属性名称asc/desc
分页查询
1mysql实现分页
(1)使用关键字limit实现
2在hql中实现分页
(1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作
投影查询
1投影查询:查询不是所有字段值,而是部分字段的值
2投影查询hql语句写法:
(1)select实体类属性名称1,实体类属性名称2 from 实体类名称
(2)select后面不能写*,不支持的
3具体实现
聚集函数使用
1常用的聚集函数
(1)count、sum、avg、max、min
2hql聚集函数语句写法
(1)查询表记录数
-select count(*) from实体类名称
QBC查询
1使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现
2使用qbc时候,操作实体类和属性
3使用qbc,使用Criteria对象实现
查询所有
1创建Criteria对象
2调用方法得到结果
条件查询
1没有语句,使用封装的方法实现
排序查询
分页查询
开始位置计算公式:(当前页-1)*每页记录数
统计查询
离线查询
1servlet调用service,service调用dao
(1)在dao里面对数据库crud操作
(2)在dao里面使用hibernate框架,使用hibernate框架时候,调用session里面的方法实现功能
(3)在后面ssh练习中具体应用
HQL多表查询
Mysql里面多表查询
1内连接
2左外连接
3右外连接
HQL实现多表查询
Hql多表查询
(1)内连接
(2)左外连接
(3)右外连接
(4)迫切内连接
(5)迫切左外连接
HQL内连接
1内连接查询hql语句写法:以客户和联系人为例
(1)from Customer c inner join c.setLinkMan
返回list,list里面每部分是数组形式
2演示迫切内连接
(1)迫切内连接和内连接底层实现一样的
(2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象
(3)hql语句写法
-from Customer c inner join fetchc.setLinkMan
HQL左外连接
1左外连接hql语句:
(1)from Customer c left outer join c.setLinkMan
(2)迫切左外连接from Customer c left outer join fetch c.setLinkMan
2左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象
1右外连接hql语句:
(1)from Customer c right outer join c.setLinkMan
Hibernate检索策略
检索策略的概念
1hibernate检索策略分为两类:
(1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
(2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库
2延迟查询分成两类:
(1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
(2)关联级别延迟:
-查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟
关联级别延迟操作
1在映射文件中进行配置实现
(1)根据客户得到所有的联系人,在客户映射文件中配置
2在set标签上使用属性
(1)fetch:值select(默认)
(2)lazy:值
-true:延迟(默认)
-false:不延迟
-extra:极其延迟
(1)调用get之后,发送两条sql语句
(1)极其懒惰,要什么值给什么值
批量抓取
1查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人
(1)上面操作代码,发送多条sql语句
2在客户的映射文件中,set标签配置
(1)batch-size值,值越大发送语句越少