聚集元素用来拍卖“一对多”的涉嫌。需求指定映射的Java实体类的特性,属性的javaType(一般为ArrayList);列表中目的的类型ofType(Java实体类);对应的数目库表的列名称;
不等情况需求报告MyBatis 如何加载一个聚众。MyBatis 可以用二种艺术加载:
- resultMap:
使用一个嵌套的结果映射来拍卖通过join查询结果集,映射成Java实体类型。*
二种加载格局格式如下:
1.集结的嵌套查询(select)
<collection property=”Java属性名” ofType=”另一Java类名”
javaType=”ArrayList”
column=”关联主键ID(用于嵌套查询SQL语句流传参数,四个用逗号分开)”
select=”另一个select映射SQL的ID”/>
<select parameterType=”int” resultType=”另一Java类名”
id=”另一个select映射SQL的ID”>
SQL语句
<select>
小心:column属性的值必须与相应的SQL查询语句中的列名相同。MyBatis会将率先条SQL语句询问出来的该列的值用于所嵌套的SQL映射语句的入参。因第一条SQL语句询问出来的每个该列的值都将用来实施另一个SQL语句,所以嵌套的SQL语句将被反复实践。
2.聚众的嵌套结果(resultMap)
<collection property=”Java属性名” ofType=”另一Java类名”
javaType=”ArrayList” resultMap=”另一个resultMap的ID”/>
<resultMap=”另一个resultMap的ID” type=”另一Java类名”>
<id property=”id” column=”关联主键ID”/>
……..
</resultMap>
留意:column属性的值必须与相应的SQL查询语句的列名一样。
聚集的嵌套查询(select)示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.myapp.mapper.UserMapper">
<select id="getUserList" resultMap="userdetailResult">
select * from t_user where id between 1 and 10
</select>
<select id="selectRoles" resultType="com.myapp.domain.Role" parameterType="int">
select * from t_user_role a,t_role b where a.user_id=#{id} and a.role_id=b.id
</select>
<resultMap id="userdetailResult" type="User">
<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" column="id" select="selectRoles"/>
</resultMap>
</mapper>
聚拢的嵌套结果(result)示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.myapp.mapper.UserMapper">
<select id="getUserList" resultMap="userdetailResult">
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
</select>
<resultMap id="userdetailResultNew" type="User">
<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>
</resultMap>
<resultMap id="roleResult" type="Role">
<id property="id" column="role_id"/>
<result property="name" column="role_name"/>
</resultMap>
<resultMap id="userdetailResult" type="User">
<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"/>
</resultMap>
</mapper>
一旦您只是简短的嵌套,可以像id=”userdetailResultNew”
那样将要嵌套的结果一向写在collection子元素中去。