目录
一、什么是级联
二、实现多表联查的方式
方式一:通过xml配置文件
1.一对一级联步骤
2.一对多联步骤
方式二:使用映射器注解方式
1.一对一映射
2.一对多映射
三、级联的缺陷
一、什么是级联
级联(cascade),是指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率
- 一对一:一个对象对应唯一的对象
- 一对多:一个对象对应多个对象
- 多对多:多个对象对应多个对象
二、实现多表联查的方式
方式一:通过xml配置文件
举例:学生和班级的关系,很明显一个学生对应一个班级,是一对一的关系
1.一对一级联步骤:
1.1 创建关联POJO:一对一级联时,以对象方式存储关联关系
1.2 创建对应的映射器
1.3 利用<association>元素完成一对一级联
- 在Student类中包含一个Banji对象
- property映射到列结果的字段或属性。如果JavaBean 有这个名字的属性(property),会先使用该属性
- column数据库中的列名,或者是列的别名
1.4 编写测试类验证级联关系,测试结果如下:
举例:班级和学生的关系,一个班级会有很多学生,是一对多的关系
2.一对多级联步骤:
2.1 创建"一"方POJO以集合的形式级联"多"方对象
2.2 创建“多”方的POJO对象
2.3 创建对应的映射器
2.4 利用collection元素实现一对多级联
2.5 编写测试文件测试一对多级联,测试结果如下:
* 需要注意的是在多表联查中没有显示映射的字段不会被赋值,所以为null
方式二:使用映射器注解方式
还是上面两个表的例子,只是方式变了
1.一对一映射:
语法:@One(Select = 一对一查询方法,fetchType = FetchType.EAGER)
说明:FetchType.lazy是延时加载,FetchType.EAGER是即时加载
一对一使用one属性,@one注解
2.一对多映射:
语法: @Many(select =一对多查询方法,fetchType = FetchType.EAGER)
说明:FetchType.lazy是延时加载,FetchType.EAGER是即时加载
一对多使用many属性,@many注解
三、级联的缺陷:
- 性能缺陷:级联操作会降低性能,增加程序的执行时间;
- 复杂度缺陷:关联较多造成复杂度的增加,不利于他人理解和维护;
在使用上建议:根据实际情况增加级联关系;多层关联,超过三层关联时建议尽量少用级联;