Hibernate_day04

上节内容

1 表与表之间关系回顾

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

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

2 hibernate一对多操作

(1)一对多映射配置

(2)一对多级联保存

(3)一对多级联删除


4

inverse
属性

3 hibernate多对多操作

(1)多对多映射配置

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


3

多对多级联删除(了解)

(4)维护第三张表

今天内容

1 hibernate的查询方式

2 对象导航查询

3 hql查询

(1)查询所有

(2)条件查询

(3)排序查询

(4)分页查询

(5)投影查询

(6)聚集函数使用

4 qbc查询

(1)查询所有

(2)条件查询

(3)排序查询

(4)分页查询

(5)统计查询

(6)离线查询

5 hql多表查询

(1)mysql多表查询回顾

(2)hql多表查询

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

6 hibernate的检索策略

(1)概念

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

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

(2)具体操作

H
ibernate
查询方式

1
对象导航查询


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

2 OID
查询


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

3 HQL
查询


1

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

4 QBC
查询


1

Criteria
对象

5
本地
sql
查询


1

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

对象导航查询

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

2
代码

OID
查询

1
根据
id
查询记录


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

HQL
查询

1 hql

hibernate query language

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

2
常用的
hql
语句


1
)查询所有:
from
实体类名称


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


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

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


1
)创建
Query
对象,写
hql
语句


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

查询所有

1
查询所有客户记录


1
)创建
Query
对象,写
hql
语句


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

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

条件查询

1 hql
条件查询语句写法:


1

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

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

2
代码

模糊查询

排序查询

1 hql
排序语句写法


1

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

分页查询

1 mysql
实现分页


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

2 hql
聚集函数语句写法


1
)查询表记录数

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

QBC
查询

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

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

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

查询所有

1
创建
Criteria
对象

2
调用方法得到结果

条件查询

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

排序查询

分页查询

开始位置计算公式: (当前页
-1

*
每页记录数

统计查询

离线查询

1 servlet
调用
service

service
调用
dao


1
)在
dao
里面对数据库
crud
操作


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


3
)在后面
ssh
练习中具体应用

HQL
多表查询

M
ysql
里面多表查询

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  fetch  c.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

H
ibernate
检索策略

检索策略的概念

1 hibernate
检索策略分为两类:


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
值,值越大发送语句越少

标签: none

添加新评论