MyBatis中resultMap和resultType的区别详解

 更新时间:2020年07月03日 10:23:40   作者:Leesin Dong  
这篇文章主要介绍了MyBatis中resultMap和resultType的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

总结

基本映射 :(resultType)使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。(数据库,实体,查询字段,这些全部都得一一对应)高级映射 :(resultMap) 如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。(高级映射,字段名称可以不一致,通过映射来实现

resultType和resultMap功能类似 ,都是返回对象信息 ,但是resultMap要更强大一些 ,可自定义。因为resultMap要配置一下,表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来,但是,resultType就比较鸡肋了,必须字段名一样,比如说 cId和c_id 这种的都不能映射 。下面介绍几个常用的映射关系:


单表查询: resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。

订单查询关联用户的resultMap

将整个查询的结果映射到cn.itcast.mybatis.po.Orders中

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  <!-- 配置映射的订单信息 -->
  <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
    column:订单信息的唯 一标识 列
    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"/>    
</resultMap>

关联查询(一对一):resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理。例如

订单查询关联用户的resultMap

将整个查询的结果映射到cn.itcast.mybatis.po.Orders中

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  <!-- 配置映射的订单信息 -->
  <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
    column:订单信息的唯 一标识 列
    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的处理方式为在订单表数据的pojo中添加一个list,list中为订单明细表的属性,在mapper.xml中采用如下的处理方式:

订单及订单明细的resultMap

使用extends继承,不用在中配置订单信息和用户信息的映射

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
  <!-- 订单信息 -->
  <!-- 用户信息 -->
  <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 -->
  
  
  <!-- 订单明细信息
  一个订单关联查询出了多条明细,要使用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>

association:

作用:
将关联查询信息映射到一个pojo对象中

场合:
为了方便查询关联查询可以使用assocation将关联查询信息映射为用户对象的pojo属性中。

比如:查询订单及关联用户信息
使用resultType无法查询结果映射到pojo对象的pojo属性中,根据对结构集查询遍历的需要选择使用resultType还是resultMap。

collection:

作用:
将关联查询信息映射到一个list集合中。
场合:
为了方便查询遍历关联信息可以使用cellection将关联信息映射到list集合中。
比如:
查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中将菜单列表映射到模块对象的菜单list属性中,这样做的目的也是方便对查询结果集进行遍历如果使用resultType无法将查询结果映射到list集合中

到此这篇关于mybaties中resultMap和resultType的区别详解的文章就介绍到这了,更多相关mybaties中resultMap和resultType的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring实现泛型注入的示例详解

    Spring实现泛型注入的示例详解

    Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持。本文将通过实例详细讲讲Spring如何实现泛型注入,需要的可以参考一下
    2022-07-07
  • MyBatis-Plus不使用数据库默认值的问题及解决

    MyBatis-Plus不使用数据库默认值的问题及解决

    这篇文章主要介绍了MyBatis-Plus不使用数据库默认值的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Mac M1 Java 开发环境配置详解

    Mac M1 Java 开发环境配置详解

    这篇文章主要介绍了Mac M1 Java 开发环境配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Spring Boot利用Java Mail实现邮件发送

    Spring Boot利用Java Mail实现邮件发送

    这篇文章主要为大家详细介绍了Spring Boot利用Java Mail实现邮件发送,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Java中Calendar类用法实例详解

    Java中Calendar类用法实例详解

    这篇文章主要给大家介绍了关于Java中Calendar类用法的相关资料,Calendar类是Java.util包中提供的一个抽象类,该类从JDK1.1开始出现,作为Date类的替代方案,Calendar类中包含了对不同国家地区日历的处理,需要的朋友可以参考下
    2023-09-09
  • Java中的值传递和引用传递区别解析

    Java中的值传递和引用传递区别解析

    这篇文章主要介绍了Java中的值传递和引用传递区别解析,引用类型的变量保存引用值,“引用值”指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在该引用值所表示的地址的位置,包含:数组、类、接口,需要的朋友可以参考下
    2023-11-11
  • Java多线程继承Thread类详解

    Java多线程继承Thread类详解

    Java多线程的两种实现方式:继承Thread类 & 实现Runable接口,今天我们来学习下继承Thread类,希望大家能够喜欢
    2016-06-06
  • Intellij IDEA如何去掉@Autowired 注入警告的方法

    Intellij IDEA如何去掉@Autowired 注入警告的方法

    这篇文章主要介绍了Intellij IDEA如何去掉@Autowired 注入警告的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • java打印从1到100的值(break,return断句)

    java打印从1到100的值(break,return断句)

    java 先写一个程序,打印从1到100的值。之后修改程序,通过使用break关键词,使得程序在打印到98时退出。然后尝试使用return来达到相同的目的
    2017-02-02
  • Yml转properties文件工具类YmlUtils的详细过程(不用引任何插件和依赖)

    Yml转properties文件工具类YmlUtils的详细过程(不用引任何插件和依赖)

    这篇文章主要介绍了Yml转properties文件工具类YmlUtils(不用引任何插件和依赖),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08

最新评论