zoukankan      html  css  js  c++  java
  • MyBatis(六):MyBatis复杂映射

    1. 一对一、多对一

      一对一/多对一都是使用association标签来进行关联,并制定javaType属性,定义resultMap接收查询结果

      例如:查询订单的时候需要一并把用户信息查出来,一个订单对应一个用户,同时多个订单对应同一个用户,Order实体增加user属性

      <select id="findAll" resultMap="orderMap">
          SELECT *,U.`name`,U.address FROM `order` O LEFT JOIN `user` U ON O.uid = U.id
      </select>
      
      <resultMap id="orderMap" type="com.rangers.entity.Order">
          <result column="id" property="id"></result>
          <result column="time" property="time"></result>
          <result column="total" property="total"></result>
          <result column="uid" property="uid"></result>
          <association property="user" javaType="com.rangers.entity.User">
              <result column="uid" property="id"></result>
              <result column="name" property="name"></result>
              <result column="address" property="address"></result>
          </association>
      </resultMap>
      
    2. 一对多

      一对多使用collection标签进行关联,并指定ofType属性,主要在于在一方定义collection标签,定义resultMap接收查询结果

      例如:一个用户对用多个订单,查询用户时把订单信息也查出来,User实体增加orderList属性

      <select id="findAll" resultMap="userMap">
          SELECT U.*,O.id oid,O.time,O.total FROM `user` U LEFT JOIN `order` O ON U.id = O.uid
      </select>
      
      <resultMap id="userMap" type="com.rangers.entity.User">
        <result column="id" property="id"></result>
        <result column="name" property="name"></result>
        <result column="address" property="address"></result>
      
        <collection property="orderList" ofType="com.rangers.entity.Order">
          <result column="oid" property="id"></result>
          <result column="time" property="time"></result>
          <result column="total" property="total"></result>
          <result column="id" property="uid"></result>
        </collection>
      </resultMap>
      
    3. 多对多

      多对多依然使用collection标签来进行关联,并指定ofType属性,在主查询表上定义collection标签,定义resultType接收查询结果

      例如:一个用户对应多个角色,一个角色可以被多个用户使用,就是个经典的多对多关系,下面查询用户同时查询出该用户的所有角色,User实体增加roleList属性

      <select id="findAllUserAndRole" resultMap="userRoleMap">
          select u.*,r.rolename,r.id rid from user u left join user_role ur on u.id=ur.user_id inner join role r on ur.role_id=r.id;
      </select>
      
      <resultMap id="userRoleMap" type="com.rangers.entity.User"> 
        <result column="id" property="id"></result> 
        <result column="name" property="name"></result> 
        <result column="address" property="address"></result> 
        <collection property="roleList" ofType="com.rangers.entity.Role"> 
          <result column="rid" property="id"></result> 
          <result column="rolename" property="rolename"></result> 
        </collection> 
      </resultMap> 
      
  • 相关阅读:
    contest hunter5105 Cookies
    bzoj2599: [IOI2011]Race
    poj1741 Tree
    bzoj2527: [Poi2011]Meteors
    bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版
    bzoj2741: 【FOTILE模拟赛】L
    bzoj3110: [Zjoi2013]K大数查询
    bzoj1901: Zju2112 Dynamic Rankings
    bzoj2821: 作诗(Poetize)
    poj1417 True Liars
  • 原文地址:https://www.cnblogs.com/rangers-sun/p/14514408.html
Copyright © 2011-2022 走看看