MyBatis级联一对一与一对多
创始人
2025-05-31 01:57:27

级联

MyBatis 的级联分为3 种:
鉴别器(discriminator):它是一个根据某些条件决定采用具体实现类的级联,比如根据角色是否可用来决定是否展示权限。
一对一(association):比如公民和身份证,学生和学号都是一种一对一的级联关系。一对多(collection):比如用户和订单,部门和员工都是一对多的级联关系。
对于多对多级联关系,在 MyBatis 中是没有专门的元素来表示的。这也比较好理解,因为多对多关系,比如用户和角色关系,在实际工作中都是拆分成两个一对多来关联。

1.在数据库中创建部门表dept和员工表emp

#部门表
drop table if exists dept;
create table dept(did int primary key,dname varchar(20),dinfo varchar(50)
);insert into dept values(101,'市场部','负责公司市场的开拓');
insert into dept values(102,'产品部','负责公司产品的营销');
insert into dept values(103,'研发部','负责公司产品的研发');
insert into dept values(104,'测试部','负责公司产品的测试');select * from dept;#员工表
drop table if exists emp;
create table emp(eid int primary key auto_increment,ename varchar(20),job varchar(20),sal double,phone varchar(11),address varchar(50),did int
);insert into emp(ename,job,sal,phone,address,did) values('赵德保','市场专员',4600,'15785642139','信阳',101);
insert into emp(ename,job,sal,phone,address,did) values('刘瑞琳','市场经理',7600,'17956248563','商丘',101);
insert into emp(ename,job,sal,phone,address,did) values('张翠萍','产品设计师',5800,'15821563548','郑州',102);
insert into emp(ename,job,sal,phone,address,did) values('刘长河','产品经理',9800,'15821563548','洛阳',102);
insert into emp(ename,job,sal,phone,address,did) values('李耀菲','开发工程师',8800,'13658942168','许昌',103);
insert into emp(ename,job,sal,phone,address,did) values('王长林','项目经理',15800,'13954865721','南阳',103);
insert into emp(ename,job,sal,phone,address,did) values('陈清泰','测试工程师',5300,'13785463249','周口',104);
insert into emp(ename,job,sal,phone,address,did) values('杨国华','测试经理',9800,'13785463249','驻马店',104);select * from emp;
select * from emp inner join dept on emp.did=dept.did;

2.在idea中创建项目并导入jar包,配置核心配置文件;

一对一

外部文件

 

 日志打印

核心配置




 部门表dept的接口与映射

public interface DeptDao {Dept selectByDid(int did);
}



员工表emp的接口与映射

public interface EmpDao {Emp selectByEid(int eid);
}

association标签配置一对一级联

property:对应实体类中的属性名名,必填项。

javaType:属性对应的Java类型

resultMap:可以直接使用现有的 resultMap,而不需要在这里配置。

方式一




方式二 




测试类

public class EmpTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;EmpDao empDao = null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();empDao = sqlSession.getMapper(EmpDao.class);}@Testpublic void testSelectByEid(){Emp emp = empDao.selectByEid(1);System.out.println(emp);}@Afterpublic void destroy() throws IOException {sqlSession.commit();sqlSession.close();stream.close();}
}

控制台日志信息

一对多 

 员工表emp的接口与映射

public interface EmpDao {Emp selectByEid(int eid);List selectByDid(int did);
}



部门表dept的接口与映射

public interface DeptDao {List selectAll();Dept selectByDid(int did);
}

collection标签配置一对多级联 

 方式一




 方式二




测试类

public class DeptTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;DeptDao deptDao = null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();deptDao = sqlSession.getMapper(DeptDao.class);}@Testpublic void testSelectByDid(){Dept dept = deptDao.selectByDid(101);System.out.println(dept);}@Testpublic void testSelectAll(){List deptList = deptDao.selectAll();for (Dept dept : deptList) {System.out.println(dept);}}@Afterpublic void destroy() throws IOException {sqlSession.commit();sqlSession.close();stream.close();}
}

控制台日志信息 

相关内容

热门资讯

VMware虚拟机卸载详细教程 安装过VMware虚拟机的小伙伴,90%可能都会遇到这样的问题:安装容易...
Linux 信号(signal... 目录一、程序的运行状态二、信号捕捉流程   在处理信号的时候,其实要经过一系列流程的&...
黄瓜胶有什么好处 极速百科网 ... 黄瓜胶的好处有以下几点: 1、美白肌肤:黄瓜胶里面维生素C的含量非常多,能够有助于抑制黑色素的...
包公断案的歇后语,标题建议:《... 包公断案——铁面无私收到你的喜欢啦收到你的喜欢啦标题建议:《包公断案:公正无私,铁面无私的典范》包公...
硫离子的电子式怎么写,硫离子的... 硫离子的电子式为:S2-。硫是一种非金属元素,原子序数为16,在元素周期表中位于第三周期的VIA族。...
摇滚og是什么意思,摇滚OG指... 摇滚OG指的是元老级的摇滚歌手,是对这些歌手的肯定和赞扬。收到你的喜欢啦收到你的喜欢啦摇滚OG指的是...
用队列实现栈和用栈实现队列(C... 目录 一、用队列实现栈 二、 用栈实现队列 一、用队列实现栈 请你仅使用两个队列实现一个后入先出&...
代码随想录刷题-哈希表-两数之... 文章目录两数之和习题暴力解法哈希表 两数之和 本节对应代码随想录中:代码随想录...
凌恩生物明星产品:让你读懂细胞... 叶绿体和线粒体是真核细胞中不可或缺的重要细胞器,是第二套遗传信息系统,与...
密码如何“加盐加密”处理?程序... 目录 前言 一、手写加盐算法 1.1、加密 1.1.1、加密思路 1.1.2、加密简图 1.1.3、...
黑化什么意思网络用语 极速百科... 黑化,词语,也可指性情大变,比如原本某A是个文青,温文尔雅,突然某天某A大开杀戒,残忍无比,这就是所...
带有古和今的成语,古今的对话:... 带有古和今的成语有很多,例如:古为今用、古往今来、古稀之年、古今中外等等。这些成语都包含了古代和现代...
能力强的人有什么特点,标题建议... 能力强的人往往具备以下特点: 1. 学习能力:能力强的人通常能够快速学习新知识和技能,并能够灵...
跑步机怎么操作大图 极速百科网... 1. 启动跑步机:首先,确保跑步机已经插上电源,然后打开跑步机的电源开关。大多数跑步机都有一个启动/...
ELK+Filebeat+Ka... 文章目录ELK+Filebeat+Kafka分布式日志管理平台搭建为什么选择ELK&...
哈希结构的代码实现(开散列、闭... 哈希结构 unordered系列的关联式容器之所以查找效率比较高,是因为其底层使用了哈...
Java Annotation... 注解 注解(Annotation),又称元数据ÿ...
bim装配式工程师证书有用吗,... 首先,我们需要明确一点,那就是BIM装配式工程师证书肯定是有用的。这个证书证明了持有人掌握了BIM技...
什么东西可以深层清洁毛孔 极速... 首先,我们要明白,毛孔的深层清洁不仅仅是指清洁面部皮肤,还包括清洁身体和头发的毛孔。接下来,我将为你...
vip全称 极速百科网 极速百... VIP的英文全称为Very Important Person,中文翻译为重要人物、要员。一般指VIP...
公共交通工具有哪些 极速百科网... 1. 城市公交:这是大家最熟悉的公共交通工具之一,提供在城市内部的运输服务。公交车根据不同的大小和座...
智能火焰与烟雾检测系统(Pyt... 摘要:智能火焰与烟雾检测系统用于智能日常火灾检测报警,利用摄像头画面实时...
【学习笔记】《Writing ... 文章目录14 Energizing Writing 充满活力的写作14.1. ACTIVE VERS...
基于R语言因果关系推断模型实践... 通过数据得到可靠的因果关系一直是科学研究的主要目标之一。对因果关系的研究已经有千年之久;...
手机qq里怎么分组,手机QQ分... 1. 打开QQ应用,进入联系人界面。 2. 找到你想要分组的联系人或群聊。 3. 长按想...
带指的成语有哪些 极速百科网 ... 指日高升、一指蔽目、屈指可数、十指连心、三指佞臣、染指垂涎、戟指怒目、屈指可数。 如需更多含有...
第十八天 Vue-前端工程化总... 目录 Vue-前端工程化 1. 前后端分离开发 1.1 介绍 1.2 Yapi 2. 前端工程化 2...
急用钱公积金怎么提现,公积金提... 1. 了解公积金提现的条件和手续。在您考虑提现之前,请务必了解您所在地区的具体规定和要求。通常,您需...
杯子刻字励志八个字,志存高远,... 杯子刻字励志八个字建议如下: 1. 志存高远,自强不息。 2. 持之以恒,锐意进取。 ...
YOLOV4详解 1. 为什么要学习YOLOV4? 通过学习YOLOV3这个很重要的算法, 可以学习到作者重新设计Da...