最近做得项目用到了MyBatis处理一对多的映射关系,下面的两个方法中用到了集合的嵌套查询方法,下面仔细学习一下这两种方式
聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:
select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活但会将执行多次嵌套的SQL语句。
resultMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。
两种加载方式格式如下:
集合的嵌套查询(select)
集合的嵌套结果(resultMap)
<resultMap=“另一个resultMap的ID” type=“另一Java类名”>
…
-
SELECT -
u.id as user_id, -
u.name as user_name, -
u.create_date, -
r.id as role_id, -
r.name as role_name -
FROM t_user u -
LEFT JOIN t_user_role ur ON(u.id=ur.user_id) -
LEFT JOIN t_role r ON(r.id=ur.role_id) where u.id=1 -
<id property="id" column="user_id" /> -
<result property="name" column="user_name"/> -
<result property="createDate" column="create_date"/> -
<collection property="roles" ofType="Role" javaType="ArrayList"> -
<id property="id" column="role_id"/> -
<result property="name" column="role_name"/> -
</collection> -
<id property="id" column="role_id"/> -
<result property="name" column="role_name"/> -
<id property="id" column="user_id" /> -
<result property="name" column="user_name"/> -
<result property="createDate" column="create_date"/> -
<collection property="roles" ofType="Role" javaType="ArrayList" resultMap="roleResult"/>
注意:column属性的值必须与相应的SQL查询语句的列名一样
1115

被折叠的 条评论
为什么被折叠?



