mybatis 多表关联查询
MyBatis 多表关联查询
一对多查询
一对多关联查询是指,在查询一方对象的时候,同时将其所关联的多方对象也都查询出来。
 .
.
Ⅰ、多表连接(联合)查询
这种方式只用到
1条SQL语句。
 .
.
注意:
- 
即使字段名与属性名相同,在 <resultMap> </resultMap>中也要写出它们的映射关系。因为框架是依据这个<resultMap> </resultMap>封装对象的。
- 
在 "一方" 的映射文件中使用 <collection> </collection>标签体现出两个实体对象间的关联关系。
其 collection 两个属性的解释如下:
- 
property:指定关联属性,即Class类中的集合属性studentList。
- 
ofType:集合属性的泛型类型,即com.rnny.entity.Student。
Ⅱ、多表单独查询
多表连接查询方式是将多张表进行连接,连为一张表后进行查询。其查询的本质是一张表。
而多表单独查询方式是多张表各自查询各自的相关内容,需要多张表的联合数据,再将主表的查询结果联合其它表的查询结果,封装为一个对象。
多个查询是可以跨越多个映射文件的,即是可以跨越多个 namespace 的。在使用其它 namespace 的查询时,添加上其所在的 namespace 即可。这种方式要用到 2 条 SQL 语句。
代码如下所示:
 .
.
- 
先执行 findClassesById查询主表classes,查询出各个列的值,包括cid。
- 
查主表出来的各个列值传递给 <resultMap id="classesResultMap" >进行结果映射。其中cid 的值还要传给<collection>节点作为实参。
- 
执行 selectStudentsByClasses查询,以cid做为实参,查询出结果,结果封装为<resultMap id="studentResultMap">。
多对一关联查询
多对一关联查询是指在查询多方对象的时候,同时将其所关联的一方对象也查询出来。
由于在查询多方对象时也是一个一个查询,所以多对一关联查询,其实就是一对一关联查询。即一对一关联查询的实现方式与多对一的实现方式是相同的。 配置多对一关联的重点在于 "多方" 的映射文件要有 <association> </association> 属性关联 "一方"。
Ⅰ、多表联合(连接)查询
 .
.
Ⅱ、多表单独查询
 .
.
- 
<select id="searchStudentsById">中查询出来的classno传递给<association>中的column="classno"
- 
再把 classno的值做为实参,传递给<select id="findClassesById">中的形参#{cid}
自连接
多对一的方式实现自连接
思路分析:将员工当作多方,上司当用一方。
 .
.
Employee 里面的一个属性 leader, 本身就是 Employee 类型。
单独查询
 .
.

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号