mybatis一对一查询

方法一:使用resultType

使用resultType,通过继承改造pojo类,此pojo类中包括了两个类字段信息,这样返回对象的时候,mybatis自动把信息也注入进来。定义专门的pojo类作为输出类型,其中定义了sql查询结果集所有的字段。

 

public class OrderUser extends Orders{
	private String username;
	private String address;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

mapper.xml

	<select id="queryOrderUser" resultType="com.it.mybatis.pojo.OrderUser">
		SELECT
		o.id,
		o.user_id
		userId,
		o.number,
		o.createtime,
		o.note,
		u.username,
		u.address
		FROM
		`orders` o
		LEFT JOIN `user` u ON o.user_id = u.id
	</select>

接口:

方法二:使用resultMap

使用resultMap,定义专门的resultMap用于映射一对一查询结果。

​​​​​​​改造pojo类

在Order类中加入User属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。

private User user;

public class Orders  implements Serializable{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;

    private User user;
    
    
    
    public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number == null ? null : number.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note == null ? null : note.trim();
    }

	@Override
	public String toString() {
		return "Orders [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
				+ ", note=" + note + "]";
	}
    
    
    
    
}

Mapper.xml

	<resultMap type="com.it.mybatis.pojo.Orders" id="orderUserResultMap">
		<id property="id" column="id" />
		<result property="userId" column="user_id" />
		<result property="number" column="number" />
		<result property="createtime" column="createtime" />
		<result property="note" column="note" />

		<!-- association :配置一对一属性 -->
		<!-- property:order里面的User属性名 -->
		<!-- javaType:属性类型 -->
		<association property="user" javaType="com.it.mybatis.pojo.User">
			<!-- id:声明主键,表示user_id是关联查询对象的唯一标识 -->
			<id property="id" column="user_id" />
			<result property="username" column="username" />
			<result property="address" column="address" />
		</association>

	</resultMap>

	<!-- 一对一关联,查询订单,订单内部包含用户属性 -->
	<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
		SELECT
		o.id,
		o.user_id,
		o.number,
		o.createtime,
		o.note,
		u.username,
		u.address
		FROM
		`orders` o
		LEFT JOIN `user` u ON o.user_id = u.id
	</select>

猜你喜欢

转载自blog.csdn.net/qq_41566772/article/details/88369584