Mybatis中的3种级联方式

本文详细介绍了Mybatis中的级联操作,包括鉴别器(discriminator)、一对一(association)和一对多(collection)。重点讲解了如何配置映射文件Mapper,并给出了具体的示例代码,包括POJO的创建、SQL语句以及测试类。特别强调了在EmployeeMapper.xml映射文件中的association和collection元素的使用,以及discrimination元素在鉴别不同情况时的作用。
摘要由CSDN通过智能技术生成

Mybatis中的级联

Mybatis的3种级联

  1. 鉴别器(discriminator): 他是一个根据某些条件决定采用具体实现类的级联的方案,比如体检要根据性别区分。
  2. 一对一(association): 比如你的省份证和你就是一种一对一的级联。
  3. 一对多(collection): 比如班主任和学生就是一种一对多的级联。

值得注意的是,Mybatis中没有多对多的级联,因为多对多级联比较复杂。使用困难,而且可以通过两个一对多级联进行替换,所以Mybatis不支持多对多级联。

示例

  • 确定一个雇员级联模型
    雇员级联模型
分析雇员级联模型
1. 该模型是以雇员表为中心的。
2. 雇员表和工牌表示 “一对一” 的级联关系。
3. 雇员表和员工任务表示 “ 一对多” 的级联关系。
4. 员工任务表和任务表是 “一对一” 的级联关系。
5. 每个员工都会有一个体检表,它是根据性别的不同,得到不同的关联表,所以是 “鉴别器” 的级联关系。
表的设计

在这里插入图片描述

SQL语句
DROP TABLE IF EXISTS t_female_health_form;
DROP TABLE IF EXISTS t_male_health_form;
DROP TABLE IF EXISTS t_task;
DROP TABLE IF EXISTS t_work_card;
DROP TABLE IF EXISTS t_employee_task;
DROP TABLE IF EXISTS t_employee;

/*==============================================================*/
/* Table: t_employee  雇员表                                    */
/*==============================================================*/
CREATE TABLE t_employee
(
   id                   INT(12) NOT NULL AUTO_INCREMENT,
   real_name            VARCHAR(60) NOT NULL,
   sex                  INT(2) NOT NULL COMMENT '1 - 男 0 -女',
   birthday             DATE NOT NULL,
   mobile               VARCHAR(20) NOT NULL,
   email                VARCHAR(60) NOT NULL,
   POSITION             VARCHAR(20) NOT NULL,
   note                 VARCHAR(256),
   PRIMARY KEY (id)
);

/*==============================================================*/
/* Table: t_employee_task  员工任务表                           */
/*==============================================================*/
CREATE TABLE t_employee_task
(
   id                   INT(12) NOT NULL auto_increment,
   emp_id               INT(12) NOT NULL,
   task_id              INT(12) NOT NULL,
   task_name            VARCHAR(60) NOT NULL,
   note                 VARCHAR(256),
   PRIMARY KEY (id)
);

/*==============================================================*/
/* Table: t_female_health_form 女性体检表                       */
/*==============================================================*/
CREATE TABLE t_female_health_form
(
   id                   INT(12) NOT NULL AUTO_INCREMENT,
   emp_id               INT(12) NOT NULL,
   heart                VARCHAR(64) NOT NULL,
   liver                VARCHAR(64) NOT NULL,
   spleen               VARCHAR(64) NOT NULL,
   lung                 VARCHAR(64) NOT NULL,
   kidney               VARCHAR(64) NOT NULL,
   uterus               VARCHAR(64) NOT NULL,
   note                 VARCHAR(256),
   PRIMARY KEY (id)
);

/*==============================================================*/
/* Table: t_male_health_form  男性体检表                        */
/*==============================================================*/
CREATE TABLE t_male_health_form
(
   id                   INT(12) NOT NULL AUTO_INCREMENT,
   emp_id               INT(12) NOT NULL,
   heart                VARCHAR(64) NOT NULL,
   liver                VARCHAR(64) NOT NULL,
   spleen               VARCHAR(64) NOT NULL,
   lung                 VARCHAR(64) NOT NULL,
   kidney               VARCHAR(64) NOT NULL,
   prostate             VARCHAR(64) NOT NULL,
   note                 VARCHAR(256),
   PRIMARY KEY (id)
);

/*==============================================================*/
/* Table: t_task  任务表                                        */
/*==============================================================*/
CREATE TABLE t_task
(
   id                   INT(12) NOT NULL auto_increment,
   title                VARCHAR(60) NOT NULL,
   context              VARCHAR(256) NOT NULL,
   note                 VARCHAR(256),
   PRIMARY KEY (id)
);

/*==============================================================*/
/* Table: t_work_card  工牌表                                   */
/*==============================================================*/
CREATE TABLE t_work_card
(
   id                   INT(12) NOT NULL AUTO_INCREMENT,
   emp_id               INT(12) NOT NULL,
   real_name            VARCHAR(60) NOT NULL,
   department           VARCHAR(20) NOT NULL,
   mobile               VARCHAR(20) NOT NULL,
   POSITION             VARCHAR(30) NOT NULL,
   note                 VARCHAR(256),
   PRIMARY KEY (id)
);

/*==============================================================*/
/* 外键约束                                                     */
/*==============================================================*/
ALTER TABLE t_employee_task ADD CONSTRAINT FK_Reference_4 FOREIGN KEY (emp_id)
      REFERENCES t_employee (id) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE t_employee_task ADD CONSTRAINT FK_Reference_8 FOREIGN KEY (task_id)
      REFERENCES t_task (id) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE t_female_health_form ADD CONSTRAINT FK_Reference_5 FOREIGN KEY (emp_id)
      REFERENCES t_employee (id) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE t_male_health_form ADD CONSTRAINT FK_Reference_6 FOREIGN KEY (emp_id)
      REFERENCES t_employee (id) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE t_work_card ADD CONSTRAINT FK_Reference_7 FOREIGN KEY (emp_id)
      REFERENCES t_employee (id) ON DELETE RESTRICT ON UPDATE RESTRICT;

/*==============================================================*/
/* 插入测试数据                                                 */
/*==============================================================*/
/*雇员表*/
INSERT INTO t_employee(id,real_name,sex,birthday,mobile,email,POSITION,note) 
			 VALUES (DEFAULT,'employee_1',1,'2000-04-23','18773459883','employee_1@.com','Programmer','小刘');
INSERT INTO t_employee(id,real_name,sex,birthday,mobile,email,POSITION,note) 
			 VALUES (DEFAULT,'employee_2',1,'2000-01-03','18773324883','employee_2@.com','Programmer','小王');
INSERT INTO t_employee(id,real_name,sex,birthday,mobile,email,POSITION,note) 
			 VALUES (DEFAULT,'employee_3',0,'2000-02-20','18773443555','employee_3@.com','Programmer','小徐');
INSERT INTO t_employee(id,real_name,sex,birthday,mobile,email,POSITION,note) 
			 VALUES (DEFAULT,'employee_4',0,'2000-04-29','18773464467',
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值