上次课回顾:
l Hibernate的一对多
n 表与表之间关系
u 一对多关系
u 多对多关系
u 一对一关系
n Hibernate的一对多配置
u 搭建Hibernate基本环境
u 创建表
u 创建实体
l 一的一方
n 放的是多的一方的集合
l 多的一方
n 放的是一的一方的对象
u 创建映射
l 一的一方
n 配置的<set>集合
l 多的一方
n 配置<many-to-one>
u 编写测试类
n Hibernate的一对多的操作
u 级联操作:cascade,用于操作其关联的对象。
l 级联保存或更新
l 级联删除
u 测试对象导航
u 放弃外键维护权:inverse,用户控制是否有外键维护能力
l Hibernate的多对多
n Hibernate的多对多配置
u 搭建Hibernate环境
u 创建表
u 创建实体
l 放置的是对方的集合
u 创建映射
l 配置的是对象的<set>
u 编写测试类
n Hibernate的多对多操作
u 级联操作
l 级联保存或更新
l 级联删除(了解)
u 其他的操作
l 给用户选择角色
l 给用户改选角色
l 给用户删除角色
以一对多为例测试该方式:
首先使用第三天的联系人客户实体及配置 但是取消级联和主键维护的配置。此处略。数据库改为hibernate4 表的创建方式改create
新建测试类:
初始化30条数据。
为了理解 tosting()客户 但是注意取消联系人集合 因为客户里有联系人联系人里有客户 会成为死循环。
结果:
注意!!!!!!!!!!
from Customer 中的Customer可不是表名字 而是实体类的名字。相当于加上包名 com.hibernate.domain.Customer
结果同上。
前两个好理解 第三个封装到对象中 需要先写构造方法。
sql:
其他都null 只查了那俩属性。
同理 tosting()一下实体类。
结果:
结果:
1.1.1.1 HQL的多表查询
l SQL的多表查询
n 连接查询
u 交叉连接:笛卡尔积
select * from A,B;
u 内连接 :inner join (inner 可以省略)
l 隐式内连接:
select * from A,B where A.id = B.aid;
l 显示内连接:
select * from A inner join B on A.id = B.aid;
u 外连接 :
l 左外连接:left outer join(outer 可以省略)
select * from A left outer join B on A.id= B.aid;
l 右外连接:right outer join(outer 可以省略)
select * from A right outer join B on A.id = B.aid;
n 子查询
l HQL的多表查询
n 连接查询
u 交叉连接
u 内连接
l 显示内连接
l 隐式内连接
l 迫切内连接
u 外连接
l 左外连接
l 右外连接
l 迫切左外连接
1.1.1.1 HQL的多表查询
l SQL的多表查询
n 连接查询
u 交叉连接:笛卡尔积
select * from A,B;
u 内连接 :inner join (inner 可以省略)
l 隐式内连接:
select * from A,B where A.id = B.aid;
l 显示内连接:
select * from A inner join B on A.id = B.aid;
u 外连接 :
l 左外连接:left outer join(outer 可以省略)
select * from A left outer join B on A.id= B.aid;
l 右外连接:right outer join(outer 可以省略)
select * from A right outer join B on A.id = B.aid;
n 子查询
l HQL的多表查询
n 连接查询
u 交叉连接
u 内连接
l 显示内连接
l 隐式内连接
l 迫切内连接
u 外连接
l 左外连接
l 右外连接
l 迫切左外连接