Mybatis中级联有关联(association)、集合(collection)、鉴别器(discriminator)三种。其中,association对应一对一关系、collection对应一对多关系、discriminator可以根据情况选择采用哪个类作为实例,关联不同的结果集。
一、关联
Mybatis的关联有两种方式:
嵌套查询:通过执行另外一个 sql映射语句来返回预期的复杂类型
嵌套结果:使用嵌套结果映射来处理重复了联合结果的子集
场景一:一个部门Department有一个部门经理Leader
select * from department where d_id=#{id}
select * from leader where l_id=#{id}
select * from department d, leader l where d.leader_id = l.l_id and d.d_id=#{id}
场景二:获取指定部门的所有上级部门(获取子结点的所有父结点,一个结点最多只有一个直接父结点)
select id,name,p_id from department where id =#{id}
二、集合
和关联一样,集合也有嵌套查询和嵌套结果两种方式,只是多了个关键字ofType,用来区分JavaBean属性类型和集合包含的类型。
场景:一个部门Department有多个员工Worker
select id,d_name from department where id=#{id}
select w_id,w_name,age from worker where d_id=#{id}
select id,d_name,w_id,w_name,age from department,worker where id=d_id and id=#{id}
三、鉴别器
有时一个数据库查询语句会返回很多不同数据类型的结果集。鉴别器用于处理这种情况,还包括类的继承层次结构,其表现相当于Java中的switch语句。
场景:交通工具Vehicle,有子类小汽车Car,卡车Truck两种类型,根据vehicle表中type字段区别数据,将查询出的数据自动封装成不同类型的对象
select * from vehicle