【Mybatis】——ResultMap学习
来源:互联网 发布:网络客户服务的优势有 编辑:程序博客网 时间:2024/06/01 09:49
开篇
在《mybatis的配置文件学习》中已经接触到了resultMap的用法,sql查询出来的列名和pojo的属性名不一致则无法映射,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系就可以解决该的问题,博客中提到的是简单属性,那么如果在返回的结果中包括对象类型或对象类型的集合使用resultMap应该如何映射呢?而使用resultType是否能够实现呢?
正文
使用resultMap的实例映射单个或多个对象集合的实例。
Pojo
订单:做以下两个不同的测试user和orderdetails属性对应的注释掉一个。
public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //用户信息 private User user; //订单明细 private List<Orderdetail> orderdetails;}
用户:
public class User { //属性名和数据库表的字段对应private int id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址}
一对一:关联查询到的单个对象:
需求说明:查询订单信息,关联查询创建订单的用户信息,一个订单只能属于一个用户
Mapper.xml
resulMap映射单个pojo对象,使用的是association
<!-- 订单查询关联用户的resultMap将整个查询的结果映射到cn.itcast.mybatis.po.Orders中--><resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap"><!-- 配置映射的订单信息 --><!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个idcolumn:订单信息的唯 一标识 列property:订单信息的唯 一标识 列所映射到Orders中哪个属性--><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property=note/><!-- 配置映射的关联的用户信息 --><!-- association:用于映射 关联查询单个对象的信息property:要将关联查询的用户信息映射到Orders中哪个属性--><association property="user" javaType="cn.itcast.mybatis.po.User"><!-- id:关联查询用户的唯 一标识column:指定唯 一标识用户信息的列javaType:映射到user的哪个属性--><id column="user_id" property="id"/><result column="username" property="username"/><result column="sex" property="sex"/><result column="address" property="address"/></association></resultMap>
使用resultMap的statement
<!-- 查询订单关联查询用户信息,使用resultmap --><select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">SELECTorders.*,USER.username,USER.sex,USER.addressFROMorders,USERWHERE orders.user_id = user.id</select>
一对多:关联查询到多条记录映射到集合对象:
需求说明:查询订单信息,关联查询该条订单的多条详细信息,一个订单可以包括多个商品,所以可以包括多条详细信息
Mapper.xml
resulMap映射多个pojo对象的集合,使用的是collection
<!-- 订单及订单明细的resultMap --><resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" ><!-- 订单信息 --><!-- 配置映射的订单信息 --><!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个idcolumn:订单信息的唯 一标识 列property:订单信息的唯 一标识 列所映射到Orders中哪个属性--><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property=note/> <!-- 订单明细信息一个订单关联查询出了多条明细,要使用collection进行映射collection:对关联查询到多条记录映射到集合对象中property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性ofType:指定映射到list集合属性中pojo的类型 --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <!-- id:订单明细唯 一标识 property:要将订单明细的唯 一标识 映射到cn.itcast.mybatis.po.Orderdetail的哪个属性 --> <id column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> </collection></resultMap>
结果:
使用resultType实现:
查询订单信息,关联查询创建订单的用户信息
第一步:建立扩展pojo类,该类继承orders类,同时将sql查到的用户名、性别、地址作为扩展属性添加。
//通过此类映射订单和用户查询的结果,让此类继承包括 字段较多的pojo类public class OrdersCustom extends Orders{//添加用户属性private String username;private String sex;private String address;}
第二步:编写mapper.xml文件,和之前使用的相同
<select id="findOrdersUser" resultType="cn.itcast.mybatis.po.OrdersCustom">SELECTorders.*,USER.username,USER.sex,USER.addressFROMorders,USERWHERE orders.user_id = user.id</select>
resultType使用比较简单,但是无法映射出pojo对象,也无法映射出pojo对象的list集合。结果如下:
总结
resultType:
作用:将查询结果按照sql列名pojo属性名一致性映射到pojo中。
resultMap:
作用:使用association和collection完成一对一和一对多的高级映射。
两者都可以完成一对一、一对多的查询,只是返回的结果不同,我们可以根据自己的需求确定到底使用哪个。例如同样是查询订单信息,关联查询创建订单的用户信息需求,如果返回的数据是在页面上进行展示,我们就没有必要使用resultMap将user的相关信息包装到user对象中,这样使用的使用需要先拿到user对象然后获取属性中的值,如果使用resultType就可以直接遍历结果获得user相关信息在页面上进行展示。
- 【Mybatis】——ResultMap学习
- MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别
- mybatis常用配置——resultMap
- MyBatis——【resultType和resultMap】
- Mybatis——resultMap的使用方法
- MyBatis学习(五)- ResultMap
- mybatis学习(二)---resultMap
- MyBatis学习(六)- ResultMap
- mybatis学习笔记之resultMap
- 博为峰JavaEE技术文章 ——MyBatis Mapper ResultMap
- MyBatis实战——resultMap,resultType简介,关联对象
- mybatis resultmap
- resultMap mybatis
- mybatis:resultMap
- MyBatis学习总结[4]-ResultMap子元素
- 【mybatis学习】MyBatis之ResultMap简介,关联对象
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- mybatis 学习二、SQL语句映射文件(1)resultMap
- springmvc如何上传图片,如何保存在本地文件夹 利用tomcat的虚拟路径访问
- JSP初学(Eclipse Java EE 环境搭建)
- 网络编程_InetAddress类的概述和使用
- java关键字static完全总结
- NAT /DNS 配置实例
- 【Mybatis】——ResultMap学习
- 2017年院赛C题 treat
- 俄罗斯方块控制台程序C++
- 赛门铁克抨击 Google 夸大其词误导用户
- 基础篇:wait与notify与notifyAll(八)
- js兼容问题
- 7、Linux内核如何装载和启动一个可执行程序
- 编码问题的一点小事
- Jquery插件-Jquery validate