mybatis关于复杂类型的关系映射
老师,项目中有一个关系映射难以理解,如下:
<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.之前学某个商城项目的时候有提到分类总数不确定的情况下,对分类表的创建和查询。它的结构是这样的:
//分类表 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"就是用来传递参数的,由于是一个参数所以会直接对应上
如果是多个参数,在关联时关联多个即可,比如(如果同学没有给字段起别名这里就是数据库中的字段名):
column="{sourceTarget=id,sourceType=cmdb_type}"
4. 由以上第三点,可以看出是怎么关联的,是通过数据库的字段名称
5.关联的字段少于查询的方法所需的参数,同学可以添加多余的字段在查询条件中
二、
同表中的关联,与不同表中的关联是一样的,同学可以给其中一个表起一个别名,这样可以把一个表当做两个表,和两张表的实现方式,原理是一样的,但是同学需要注意分类这里是一对多的关系,并不是一对一的关系。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星