天天看點

mybatis的resultMap傳回一對一和一對多結果集自動封裝到到對象屬性中,含list<String>

一、resultmap中的一對一,一對多的使用

(1)resultmap的使用方法

<resultMap id="同意mapper檔案唯一的辨別" type="映射的pojo對象">
  <id column="表的主鍵字段對應别名" jdbcType="字段類型" property="映射pojo對象的主鍵屬性" />
  <result column="表的一個字段的别名" jdbcType="字段類型" property="映射到pojo對象的對應屬性"/>
   <!-- 一對一,代表這個對象裡面的pojo對象-->
  <association property="pojo的一個對象屬性" javaType="pojo關聯的pojo對象">
    <id column="關聯pojo對象對應表的主鍵字段" jdbcType="字段類型" property="關聯pojo對象的主席屬性"/>
    <result  column="任意表的字段" jdbcType="字段類型" property="關聯pojo對象的屬性"/>
  </association>
  <!-- 一對多,代表這個對象裡面的集合pojo對象-->
  <collection property="pojo的集合屬性" ofType="集合中的pojo對象">
    <id column="集合中pojo對象對應的表的主鍵字段" jdbcType="字段類型" property="集合中pojo對象的主鍵屬性" />
    <result column="可以為任意表的字段" jdbcType="字段類型" property="集合中的pojo對象的屬性" /> 
  </collection>
</resultMap>
           

(2)resultmap的使用樣例

<resultMap id="orderMap" type="com.yin.databaseproject.vo.OrderVO">
        <id column="orderId"  property="orderId" />
        <result column="numId" jdbcType="VARCHAR" property="numId"/>
         <!-- 一對一,代表這個對象裡面的pojo對象-->
        <association property="user" javaType="com.yin.databaseproject.vo.UserVO">
            <id column="userId" jdbcType="VARCHAR" property="id"/>
            <result  column="username" jdbcType="VARCHAR" property="username"/>
        </association>
        <!-- 一對多,變成list<String> -->
         <collection property="orderDetailId" ofType="string">
            <constructor>
                <arg column="orderDetail"/>
            </constructor>
        </collection>
        <!-- 一對多,變成list<Object> -->
        <collection property="orderDetail" ofType="com.yin.databaseproject.vo.OrderDetail">
            <id column="orderDetail" jdbcType="VARCHAR" property="id" />
            <result column="itemId" jdbcType="VARCHAR" property="itemId" />
        </collection>
    </resultMap>
    
    <select id="findOrdersa" resultMap="orderMap">
        SELECT
            o.id as orderId,
            user_id as userId,
            u.username as username,
            number as numId,
            od.id AS orderDetail ,
            od.items_id as itemId
        FROM
            orders o
            LEFT JOIN orderdetail od ON o.id = od.orders_id
            left join user u on o.user_id=u.id
    </select>
           

3、vo類

@Data
public class OrderVO {
    private String orderId;
    private String numId;
    private UserVO user;
    private List<String> orderDetailId;
    private List<OrderDetail> orderDetail;
}
@Data
public class UserVO  {
    private String id;
    private String username;
    private String password;
    private String phone;
}
@Data
public class OrderDetail {
    private String id;
    private String itemId;
}


           

繼續閱讀