Hibernate_day04

来源:互联网 发布:淘宝网买家信用 编辑:程序博客网 时间:2024/06/08 18:27

Hibernate_day04

上节内容

1表与表之间关系回顾

1)一对多(客户和联系人)

2)多对多(用户和角色)


2hibernate一对多操作

1)一对多映射配置

2)一对多级联保存

3)一对多级联删除

4inverse属性


3hibernate多对多操作

1)多对多映射配置

2)多对多级联保存(重点)

3多对多级联删除(了解)

4)维护第三张表

今天内容

1hibernate的查询方式


2对象导航查询


3hql查询

1)查询所有

2)条件查询

3)排序查询

4)分页查询

5)投影查询

6)聚集函数使用


4qbc查询

1)查询所有

2)条件查询

3)排序查询

4)分页查询

5)统计查询

6)离线查询


5hql多表查询

1mysql多表查询回顾

2hql多表查询

-内连接、迫切内连接、左外连接、迫切左外连接、右外连接


6hibernate的检索策略

1)概念

-hibernate分成:立即和延迟查询

-延迟查询分成:类级别和关联级别延迟

2)具体操作


Hibernate查询方式

1对象导航查询

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


2OID查询

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


3HQL查询

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


4QBC查询

1Criteria对象


5本地sql查询

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

对象导航查询

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


2代码


OID查询

1根据id查询记录

1)调用session里面的get方法实现


HQL查询

1hqlhibernatequerylanguagehibernate提供一种查询语言,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条件查询语句写法:

1from 实体类名称where实体类属性名称=?and实体类属性名称=?

from实体类名称where实体类属性名称like?


2代码

模糊查询


排序查询

1hql排序语句写法

1from实体类名称orderby实体类属性名称asc/desc




分页查询

1mysql实现分页

1)使用关键字limit实现


2hql中实现分页

1)在hql操作中,在语句里面不能写limithibernateQuery对象封装两个方法实现分页操作



投影查询

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


2投影查询hql语句写法:

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

2select后面不能写*,不支持的


3具体实现


聚集函数使用

1常用的聚集函数

1countsumavgmaxmin


2hql聚集函数语句写法

1)查询表记录数

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



QBC查询

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


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


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




查询所有

1创建Criteria对象

2调用方法得到结果



条件查询

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



排序查询



分页查询


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


统计查询


离线查询

1servlet调用serviceservice调用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语句写法:以客户和联系人为例

1from Customer c inner join c.setLinkMan

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


2演示迫切内连接

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

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

3hql语句写法

-from Customer c inner join fetchc.setLinkMan


HQL左外连接

1左外连接hql语句:

1from Customer c left outer join c.setLinkMan

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


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


1右外连接hql语句:

1from Customer c right outer join c.setLinkMan


Hibernate检索策略

检索策略的概念

1hibernate检索策略分为两类:

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


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


2延迟查询分成两类:

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


2)关联级别延迟:

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


关联级别延迟操作

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

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


2set标签上使用属性

1fetch:值select(默认)

2lazy:值

-true:延迟(默认)

-false:不延迟

-extra:极其延迟


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

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


批量抓取

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

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


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

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