简言:本来这是昨天看的,但是因为想好好写一下【级联】这个东西,所以就看完之后今天来整理一下。
级联
1. 什么是级联
级联是一个数据库实体的概念。比如教师就需要存在学生与之对应,这样就有教师学生表,一个教师可能有多个学生,这就是一对多的级联;除此之外还有一对一的级联,比如身份证和公民是一对一的关系;再例如用户与角色的关系,一个用户有多个角色,一个角色也可能有多个用户,这就是多对多的级联。(在MyBatis中多对多的级联可以用两个一对多的级联进行代替)
级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多会增加系统的复杂度,同时降低系统的性能,此增彼减,所以当级联的成绩超过3层时,就不要考虑使用级联了,因为这样会造成对个对象的关联,导致系统的耦合、复杂和难以维护。在现实的使用过程中,要根据实际情况判断是否需要使用级联。
2. MyBatis中的级联
MyBatis的级联分三种:
鉴别器(discriminator):它是一个根据某些条件决定采用具体哪类级联的方案(说白了就是根据给出的条件去判断采用哪种级联,有点JavaSE中Switch的感觉,而且鉴别器也可以不去采用级联,而是直接映射关系,下面会有介绍)
一对一(association):比如学生证和学生就是一种一对一的级联
一对多(collection):比如老师和学生就是一种一对多的级联
3. 级联的配置与使用
一对一的级联:
拿身份证和公民的关系举例:先建两个POJO文件。假设要得到公民信息。
/* 公民类 */ public class person { private int id; private String name; private IDCard idCard; /* getters and setters */ } /* 身份证类 */ public class IDCard { private long id; private String name; private String addr; /* getters and setters */ }