Mybatis的关联查询映射
1. 介绍:关联查询字面意思上就是多表之间的查询,单表操作是最简单的,多表操作才是业务所需要的,那么查出来的字段怎么封装呢?
2. mybatis在这方面提供了很大的便利,通过三个标签便可以完成,resultMap、collection和association便是今天的猪脚
先对这几个标签做一下介绍
2.1 resultMap :
id —— 我们调用的标识
type —— 映射的类
2.2 collection :(resultMap中包含的集合字段,一对多)
column —— 数据库的字段
ofType —— 映射的类
property —— 映射的字段
select —— 我们调用的mapper方法
2.3 association : (resultMap中包含的单条对应数据,一对一)
column —— 数据库的字段
javaType —— 映射的类
property —— 映射的字段
select —— 我们调用的mapper方法
在很久很久以前我们通常这样来进行关联查询映射,
<resultMap id="AllottedItemDTO" type="com.**.AllottedItemDTO">
<id column="allottedHeaderId" property="allottedHeaderId"/>
<collection property="allottedBoxItemDTOList" column="allottedHeaderId" ofType="com.**.AllottedBoxItemDTO" select="getAllottedBoxItem"/>
</resultMap>
调用collection和assocaition时,我们需要传入column这个参数,而这个参数我们必须在resultMap中,用id或者property标签显示,
其余字段mybatis会自动判断进行映射。接下来说一下另一种解决方案。
3. 上文中我们可能需要使用多条sql才可以完成相关映射,这次用一条语句来就查出关联数据。
补充一下
association : (如果多个类后缀相同,前缀不同,可以提取出一个合适的resultMap)
resultMap —— 调用一个通用的结果集映射
columnPrefix —— resultMap中column映射会添加前缀
#下面的例子没有测试,但是大致是这样写的
select a.id,a.name,a.sex,a.c_id, b.b_id,b.b_name,b.b_sex, c.c_id,c.c_name,c.c_sex from a left join b on a.id = b.a_id inner join c on a.c_id = c.a_id where a.id = #{id} <resultMap id="a" type="A"> <id column="id" property="id"/> <result column="c_id" property="cId"/> ... <collection column="b" ofType="B"> ... </collection> <association column="c" javaType="C"> ... </association> </resultMap>
mybatis会自动封装成我们想要的数据