1. 程式人生 > >MyBatis級聯一個物件屬性賦值

MyBatis級聯一個物件屬性賦值

兩個pojo類如下:

package com.itlike.domain;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@[email protected]@ToString
public class Customer {
    private Integer cust_id;
    private String cust_name;
    private String cust_profession;
    private String cust_phone;
    private String email;
}

package com.itlike.domain;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@[email protected]@ToString
public class Order {
    private Integer order_id;
    private String order_name;
    private String order_num;
    private Customer customer;
}

資料庫裡有兩張表,客戶表和訂單表,訂單表的外來鍵指向客戶表的主鍵
需求:查詢所有的訂單及其對應客戶
OrderMapper內容如下:

package com.itlike.mapper;

import com.itlike.domain.Order;

import java.util.List;

public interface OrderMapper {
    //查詢所有訂單及其對應客戶
    public List<Order> getAllOrder();
}

OrderMapper.xml內容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.itlike.mapper.OrderMapper">

    <resultMap id="orderMap" type="Order">
        <id property="order_id" column="order_id"/>
        <result property="order_name" column="order_name"/>
        <result property="order_num" column="order_num"/>

        <!--級聯對映寫法一-->
        <result property="customer.cust_id" column="cust_id"/>
        <result property="customer.cust_name" column="cust_name"/>
        <result property="customer.cust_profession" column="cust_profession"/>
        <result property="customer.cust_phone" column="cust_phone"/>
        <result property="customer.email" column="email"/>
	<!--級聯對映寫法二          開發中更多用這種-->
	 <association property="customer" javaType="Customer">
            <id property="cust_id" column="cust_id"/>
            <result property="cust_name" column="cust_name"/>
            <result property="cust_profession" column="cust_profession"/>
            <result property="cust_phone" column="cust_phone"/>
            <result property="email" column="email"/>
        </association>
    </resultMap>

    <select id="getAllOrder" resultMap="orderMap">
        SELECT * from `order` as o LEFT JOIN `customer` as c on o.cust_id=c.cust_id;
    </select>
</mapper>

使用第一種寫法時,自身的屬性可以省略不寫,使用association時,不僅級聯首先要寫,自身屬性也必須得寫
使用association時,一定要寫javaType,否則出現空指標異常
在這裡插入圖片描述