本系列文章在 https://github.com/freestylefly/javaStudy 持(jing)续(chang)更(duan)新(geng)中,欢迎有兴趣的童鞋们关注。
一、数据库表与表之间的关系
1、一对多关系
1)一个部门对应多个员工、客户和联系人、商品和分类
2)建表原则
在多的一方创建外键,指向一的一方的主键
2、多对多关系
1)学生和课程、用户和角色
2)建表原则
创建一个中间表,中间表至少有两个字段分别作为指向多对多双方的主键
3、一对一关系
1)公司和注册地址
2)建表原则
唯一外键对应:模拟一对多关系,在多的一方创建外键约束,并加唯一约束;
主键对应:两个主键关联
二、Hibernate一对多关系配置
1、建表
根据一对多建表原则建表
2、实体类
1)在一的一方需要添加多的对象的集合
1 | private Set<LinkMan> linkMan = new HashSet<LinkMan>(); |
2)在多的一方设置一的一方的对象属性
1 | private Customer customer; |
3、持久化类的映射配置
1)在一的一方配置
1 | <!-- 配置一对多的映射:放置的多的一方的集合 --> |
2)多的一方配置
1 | <!-- 配置多对一的关系:放置的是一的一方的对象 --> |
4、核心配置文件的配置
需要将映射文件都放入核心配置中来
5、一对多的级联操作
正常未作其他配置的前提下,必须保存两个才可以进行执行,否则就会报瞬时对象异常
1)级联保存或更新
保存客户级联联系人:
在客户的映射中的set标签中加cascade属性,值为save-update,为了避免产生多余的sql语句,通常在一的一方的set中添加属性inverse=”true”,放弃外键维护
1 |
保存联系人级联客户@Test
/*
级联保存——保存一的一方(保存客户,级联联系人)
*/
public void demo2() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
1 | Customer customer = new Customer(); |
在联系人的配置文件中cascade
*通过级联操作可以测试对象的导航,判断发送几条sql语句
6、级联删除
在JDBC或者数据库中,有主外键关系的数据表,要先删除从表,再删除主表,在hibernate中科技设置级联删除,删除某一方就可以将级联的也删除掉
1)删除客户级联删除联系人
在客户的配置文件的set中的cascade中新加值delete
7、cascade和inverse区别
cascade是级联操作设置
inverse是维护外键的设置
8、测试对象的导航
1 |
|
三、Hibernate的多对多关系映射
1、建表
多对多关系一定要建立中间表
2、创建实体
在两边的实体中都要添加另一方的set集合作为一个属性
3、创建映射
1 | <!-- 建立与角色的多对多的映射关系 --> |
4、多对多的级联保存或更新
同样未设置级联操作的时候只保存一方是会抛异常的,注意多对多关系,一定要有一方放弃外键维护,通常是被动方放弃外键维护,这里可以是角色方放弃外键维护inverse=“true”
1)保存用户级联保存角色
在用户的一方的映射文件中配置set的一个cascade属性,值是sava-update
并将逐渐交给该类维护
1 |
|
2)保存角色激烈保存用户
在角色的映射中的set加cascade属性,并且维护外键
5、多对多级联删除(基本用不上)
6、给用户选择角色
1 | } |
7、给用户改选角色
1 |
|
8、给用户删除角色
1 |
|
四、QBC查询、
1、 QBC简单查询
1 |
|
2、 QBC条件查询
1 |
|
3、QBC排序查询
1 |
|
4、QBC分页查询
1 |
|
5、 QBC统计查询
1 |
|
6、离线条件查询
1 |
|
五、SQL检索
写sql语句
1 |
|