mybatis关于复杂类型的关系映射
老师,项目中有一个关系映射难以理解,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < resultMap id = "resultMap" type = "Staff" > < id property = "id" column = "id" javaType = "Integer" /> < result property = "account" column = "account" javaType = "String" /> < result property = "password" column = "password" javaType = "String" /> < result property = "status" column = "status" javaType = "String" /> < result property = "did" column = "did" javaType = "Integer" /> < result property = "name" column = "name" javaType = "String" /> < result property = "sex" column = "sex" javaType = "String" /> < result property = "idNumber" column = "id_number" javaType = "String" /> < result property = "workTime" column = "work_time" javaType = "java.util.Date" /> < result property = "leaveTime" column = "leave_time" javaType = "java.util.Date" /> < result property = "bornDate" column = "born_date" javaType = "java.util.Date" /> < result property = "info" column = "info" javaType = "String" /> < association property = "department" column = "did" javaType = "Department" select = "com.imooc.sm.dao.DepartmentDao.selectById" /> </ resultMap > |
1.在这个映射关系中,Staff类的最后一个成员是Department类对象,这个成员对象映射的是数据表的did字段,它应该是将一条查询SQL的结果当作返回结果映射给Staff类里的department这个对象成员的吧。这里调用了DepartmentDao的selectById方法来返回一个Department类对象,
(1)里面不是要传一个id参数么?
(2)这里参数就难道默认是数据表的did字段(即关联字段)么?
(3)如果是这样的话,那要是调用的查询方法有多个参数怎么办呢?
(4)难道要关联多个数据表字段么?
(5)即便如此,那怎么确定第一第二个参数分别是谁呢?
(6)另外,如果关联的字段少于查询的方法所需的参数,可以自定义多出的参数么?
2.之前学某个商城项目的时候有提到分类总数不确定的情况下,对分类表的创建和查询。它的结构是这样的:
1 2 3 4 5 6 7 | //分类表 public class Sort { private int id; //该分类id private String name; //该分类名称 private int pid; //该分类的上一级分类id,如果该分类是一级分类,默认pid=0 private Sort par_sort; //该分类的父级(上一级)分类,如果该分类是以及分类,默认par_sort=null; } |
也就是说,这个表是关联自身的,不是通过外键关联其他表的,通过自己的某个字段关联到了本表中的另一条记录。那请问老师,在这种情况下,我要查询一个分类的所有信息(包括返回它的父级分类),最后返回一个完整的分类对象,用本项目这种方式如何实现呢?原理又是如何的?
正在回答
同学你好!
一、
的确是传入了一个参数
column="did"就是用来传递参数的,由于是一个参数所以会直接对应上
如果是多个参数,在关联时关联多个即可,比如(如果同学没有给字段起别名这里就是数据库中的字段名):
1 | column= "{sourceTarget=id,sourceType=cmdb_type}" |
4. 由以上第三点,可以看出是怎么关联的,是通过数据库的字段名称
5.关联的字段少于查询的方法所需的参数,同学可以添加多余的字段在查询条件中
二、
同表中的关联,与不同表中的关联是一样的,同学可以给其中一个表起一个别名,这样可以把一个表当做两个表,和两张表的实现方式,原理是一样的,但是同学需要注意分类这里是一对多的关系,并不是一对一的关系。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧