概述
一、输入映射 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中进行配置:
最后
以上就是顺利河马为你收集整理的MyBatis学习笔记(三)——输入(parameterType)与输出(resultType、resultMap)映射的全部内容,希望文章能够帮你解决MyBatis学习笔记(三)——输入(parameterType)与输出(resultType、resultMap)映射所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复