resultMap之collection聚集

聚集元素用来拍卖“一对多”的涉嫌。需求指定映射的Java实体类的特性,属性的javaType(一般为ArrayList);列表中目的的类型ofType(Java实体类);对应的数目库表的列名称;
不等情况需求报告MyBatis 如何加载一个聚众。MyBatis 可以用二种艺术加载:

  1. 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子元素中去。

网站地图xml地图