MyBatis学习笔记(三)——输入(parameterType)与输出(resultType、resultMap)映射

一、输入映射 parameterType

在MyBatis中,我们通过parameterType属性完成输入类型映射。这个属性可接收普通类型也可以接收一个pojo对象。那么如果我们想要通过这个属性映射两个或多个pojo对象时应该怎么做呢? 这个时候我们就可以运用包装类来解决这一问题。

1.先在数据库中建一个表(order_detail):

2.创建order_detail的实体类(OrderDetail.java):

package domain;

public class OrderDetail {
	private Integer id;
	private Integer order_id;
	private Integer item_id;
	private Integer item_num;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getOrder_id() {
		return order_id;
	}
	public void setOrder_id(Integer order_id) {
		this.order_id = order_id;
	}
	public Integer getItem_id() {
		return item_id;
	}
	public void setItem_id(Integer item_id) {
		this.item_id = item_id;
	}
	public Integer getItem_num() {
		return item_num;
	}
	public void setItem_num(Integer item_num) {
		this.item_num = item_num;
	}

}

3.创建包装类(OrderQueryVo.java):

package domain;

public class OrderQueryVo{
	private Order order;
	private OrderDetail orderDetail;

	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.order = order;
	}
	public OrderDetail getOrderDetail() {
		return orderDetail;
	}
	public void setOrderDetail(OrderDetail orderDetail) {
		this.orderDetail = orderDetail;
	}

}

4.在OrderMapper.xml中添加如下配置信息:

5.在OrderMapper.java中添加对应方法:

二、输出映射

输出映射有resultType和resultMap,他们都是指定输出结果的类型(pojo、简单类型、hashmap…),并将sql查询结果映射为java对象

2.1 resultType

使用resultType时我们应该注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性名全部不相同(或是部分不相同),则映射到pojo对象中的对应属性为null。例如有时候我们不需要查询select * from user where id = ?而是select username,address _address where id = ? 此时我们给查询的address列名给了一个别名_address,这样我们通过查询表中address的数据然后在将它映射到User对象时,该对象的address属性就为null,即没将从表中查询到的address数据映射到user对象的address属性中。

此时resultMap就出现了。如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap就可以将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)。

2.2 resultMap

2.2.1 使用resultMap解决sql查询列名和最终要映射的pojo的属性名不一致情况

使用resultMap需要在UserMapper.xml中进行配置:

然后在UserMapper.xml中使用它:

2.2.2 使用resultMap映射包装类

用<association></association>标签去关联包装类中的类型

在UserMapper.xml中进行配置:

2.2.3 当类中有集合属性时,也可用resultMap输出映射集合属性:

用<collection></collection>标签去关联包装类中的集合属性

重新编写一下包装类:

package domain;

import java.util.List;

public class OrderQueryVo{
	private Order order;
	private List<OrderDetail> orderDetailList;//集合属性
	
	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.order = order;
	}
	public List<OrderDetail> getOrderDetail() {
		return  orderDetailList;
	}
	public void setOrderDetail(List<OrderDetail> orderDetailList) {
		this.orderDetailList = orderDetailList;
	}

}

在UserMapper.xml中进行配置:

猜你喜欢

转载自blog.csdn.net/weixin_41072833/article/details/81173533
今日推荐