MyBatis级联一个对象属性赋值

两个pojo类如下:

package com.itlike.domain;

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

@Setter@Getter@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;
@Setter@Getter@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,否则出现空指针异常
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43014205/article/details/85261459
今日推荐