查看: 1687|回复: 0

[Java学习] 阿里P7JAVA大牛带你一起来看MyBatis(七)

发表于 2018-1-25 16:58:04
在上一章中我们探讨了一对一的关系在mapper文件中如何配置,那么一对多呢?话不多说,直接进入今天的主题,聊一聊一对多的关系在mapper文件中如何配置。大家感觉我写的不错,可以关注一下我的,谢谢
一对多
老规矩,以一个demo为例,步骤如下,前面重复了很多次的步骤我就不一一截图咯,直接文字带过,忘记的同学可以看下之前的章节
1)准备两张数据表部门t_department和员工t_employee
一个部门有多个员工,一个员工只能属于一个部分,当然,还是排除特殊情况,比如一个员工身兼多职属于两三个部分,这种情形我们不考虑。
并且在两张表中添加几条数据
t_department表
t_employee表
2)准备好Java工程,名称为“ES9D_MyBatis7”
并导入相关jar包,创建SqlMapConfig.xml文件,准备好MyBatisUtil工具类
3)创建两张数据表对应的实体类
Department类
Employee类
4)创建departmentMapper.xml文件,然后需求来了,查询出部门id为1的所有信息
从sql语句来出发,还是有两种方式
要朝这java程序员发展或者真心有兴趣的。可以找我要一些java的学习视频java学习交流群:450936584,这个是免费的,希望同学找我要的时候不要有理所应当的态度,毕竟都是我的心血,希望你是真的有一颗想要学好java的心,我也会尽所能的去帮助你成为一名优秀的程序员
a.两次查询
select * from t_department where department_id=1;
select * from t_employee where department_id=1;
b.一次查询
select * from t_department d,t_employee e where d.department_id=1 and d.department_id=e.department_id;
5)两次查询select标签写法
根据之前的经验,我们把select标签能写的地方先写完
这个过程比较熟悉了,然后咱们考虑什么?再次懵逼,一定要养成习惯,看看数据表字段名和实体类属性名是否一致?如果不一致,得映射一下,不然值最后取不到,在第五章咱们有详细介绍,忘记的同学可以去看一下。我们发现是不一致的,于是用resultMap来映射咯,当然也可以使用别名的方式。
接下来呢?是不是就可以通过代码来测试了?显然是不行的,因为这两张表或者两个实体类之间有一对多的关系,Department是一,Employee是多。在数据表中是通过在多的一方加外键体现的,在实体类中,是通过在一的一方维护List集合。那么在配置文件中,肯定不能把这种关系丢了。之前的“一对一”,咱们使用的是association标签,那么在“一对多”的关系中,使用什么标签呢?肯定也有对应的标签来体现这种关系,那就是collection标签,顾名思义,就是集合的意思,但是问题来了,collection标签用在哪?看下面的代码
ofType和之前“一对一”中的javaType类似,select属性表明lists的值从哪边获得,即从第二个select标签中取得,然后我们来看下运行结果
6)一次查询select标签写法
先把select标签基础写好,然后是检查字段名和属性名是否一致,不一致进行映射,至于Department中的List集合同样用collection标签,具体值是一个个Employee对象,和“一对一”联合查询配置的情况基本一样,就是这么so easy。
我们看下运行结果,没有问题
好了,到这里,一对一和一对多的情况咱们都已经了解如何使用了,那么多对多呢?一样的,多对多其实是两个一对多,需要建立一个中间表,然后做法和一对多一样。
有些同学对数据表的设计这块有些吃力,不熟悉的同学可以去查阅下相关的资料。当然,后面我们也会推出相应的文章或者视频。



回复

使用道具 举报