Mybatis resultMap 中 collection association 的用法

controller---------------------------------------------------------------------  两个请求     

@RequestMapping(value="testResultMap" , method = RequestMethod.GET)
public void testResultMap(){
String id = "1";
List<MyModel2> list=sysService.testRun08(id);
System.out.println("lalala");
}

 


@RequestMapping(value="testResultMapOne" , method = RequestMethod.GET)
public void testResultMapOne(){
List<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(3);
List<MyModel> list1=sysService.testRun09(list);
System.out.println("lalala");
}

 

 testResultMap 返回的是 一对多的情况  图1

 

 testResultMapOne  返回的是  一对一的情况   图2

图1

图2

 

 

 

service-----------------------------------------------------------------

 

public List<MyModel2> testRun08(String id){
List<MyModel2> l = sysUMapper.testresultModel2(id);
return l;
}


public List<MyModel> testRun09(List<Integer> list){
List<MyModel> l = sysUMapper.testresultModel2one(list);
return l;
}

mapper.java-----------------------------------------------------------------------

public List<MyModel2> testresultModel2(@Param("id") String id );

public List<MyModel> testresultModel2one(@Param("list") List<Integer> list );

model(pojo)-------------------------------------------------------------------------------(省略getter setter)用到的三个model类

public class Detail {
private Long id;
private String userId;
private String level;
private String jurisdiction;

 

 

public class MyModel2 {
private Long id;
private String username ;
private String sex;
private String birthday;
private String address;
private List<Detail> details;

 

 

public class MyModel {
private Long id;
private String username ;
private String sex;
private String birthday;
private String address;
private Detail detail;

 

mapper.xml------------------------------------------------------

collection 对应指定着    model2中的 类   List<Detail>  details

这里特别注意的是:

details 是  一个List<Detail>  details   ;  这个变量装着  一对多情况中的    

 多个Detail对象  (我当然说的是 图1中的情况  :一个user 对应多个detail  )

这些detail 就应该存在 details这个List中! 这也是我们选择应用<collection>的原因

更需要注意的是   <collection property="details" ofType="com.sly.web.sys.model.Detail">
            <id column="did" property="id" />  这个id     一定要注意  id 名对应 表中的列名 , 并且 id 是唯一标识;

不然会出现一种情况: 返回的list 也就是details 中  只有一条数据,这条数据就是查询的第一条数据!!!!!!!!!!!!!!!!!!

 

<resultMap type="com.sly.web.sys.model.MyModel2" id="DetailWithinMyModelList">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <result column="sex" property="sex"/>
    <result column="birthday" property="birthday"/>
    <result column="address" property="address"/>

    <collection property="details" ofType="com.sly.web.sys.model.Detail">
      <id column="did" property="id" />
      <result column="user_id" property="userId"/>
      <result column="level" property="level"/>
      <result column="jurisdiction" property="jurisdiction"/>
    </collection>
</resultMap>


<select id="testresultModel2" resultMap="DetailWithinMyModelList">
  select us.*, ud.id did , ud.user_id, ud.level, ud.Jurisdiction from testuser us ,userdetail ud
   <where>
    us.id = ud.user_id
    and ud.user_id = #{id}
  </where>
</select>

 

这里要分清 你要返回的对象  是一对多关系 还是一对一关系  ,  如果是上面这种一对多关系 

,如果使用了association  结果是   你只能返回一条记录  ,也就是第一条记录

association  对应着  你model 里面的指定的  类(detail)

 


<resultMap type="com.sly.web.sys.model.MyModel" id="DetailWithinMyModel">
  <id column="id" property="id"/>
  <result column="username" property="username"/>
  <result column="sex" property="sex"/>
  <result column="birthday" property="birthday"/>
  <result column="address" property="address"/>
  <association property="detail" javaType="com.sly.web.sys.model.Detail" >
    <id column="did" property="id" />
    <result column="user_id" property="userId"/>
    <result column="level" property="level"/>
    <result column="jurisdiction" property="jurisdiction"/>
  </association>
</resultMap>

<select id="testresultModel2one" resultMap="DetailWithinMyModel">
  select us.*, ud.id did , ud.user_id, ud.level, ud.Jurisdiction from testuser us ,userdetail ud
<where>
    us.id = ud.user_id
    and ud.user_id in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
        #{item}
  </foreach>
</where>
</select>

 

posted on 2017-08-30 16:34  跳刀玛利亚  阅读(306)  评论(0编辑  收藏  举报

导航