一、输入映射 parameterType
在MyBatis中,我们通过parameterType属性完成输入类型映射。这个属性可接收普通类型也可以接收一个pojo对象。那么如果我们想要通过这个属性映射两个或多个pojo对象时应该怎么做呢? 这个时候我们就可以运用包装类来解决这一问题。
1.先在数据库中建一个表(order_detail):
2.创建order_detail的实体类(OrderDetail.java):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35package 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):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package 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>标签去关联包装类中的集合属性
重新编写一下包装类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package 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)映射内容请搜索靠谱客的其他文章。
发表评论 取消回复