• 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>

  • 相关阅读:
    【转】日本留学——修士申请注意事项
    【转】日本留学读研究生和修士有什么区别?申请误区有哪些
    【转】为什么说学一门小语种,就能打开新世界的大门?
    【转】TED:两年一门外语--她总结了学外语的秘诀
    【转】为什么一定要学一门外语?
    【转】学完标准日本语初级至高级,可以过日语n1吗?
    【转】去日本语言学校前,日语应该达到几级呢?
    Cordova学习
    敏捷开发实录(二)
    Mac端博客发布工具推荐
  • 原文地址:https://www.cnblogs.com/lize1215/p/7453805.html
Copyright © 2020-2023  润新知