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> 
    
原文地址:https://www.cnblogs.com/rangers-sun/p/14514408.html