点击蓝色“程序猿DD”关注我

回复“资源”获取独家整理的学习资料!

1.概述

Mybatis ORM半自动映射框架对java开发工程师来说应该是必会的框架之一。它的好处这里不是我们讨论的重点。令很多刚刚入行的java开发小伙伴迷茫的是 resultType与resultMap的使用。今天来探讨一下这个问题。

2.resultType与resultMap

接下来我们就来讲一下Mybatis中resultType与resultMap之间的关系和使用场景。

2.1 resultType

从select语句中返回的期望类型的类的完全限定名或别名。注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。

2.2 resultMap
从这条语句中返回的期望类型的类的完全限定名或别名。注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。
2.3 共同点

resultType与resultMap首先都是用来归纳查询类型sql的结果集,对查询结果进行你需要的结构描述。对于同一个select标签中二者不能共存。这一点对很多人来说很好理解。重要的是不同点和对应的使用场景。

2.4 二者分别的使用场景

对于查询结构需要返回的简单pojo,结果都可以映射到一致的hashMap上,换句话来说就是数据库列名可以精确匹配到pojo属性的。一般都用resultType。其实这里有一个隐含的构建机制。映射到resultType的结果都是MyBatis在幕后自动创建了一个resultMap来处理的。简而言之,只要resultType能干的事情resultMap都能干。二者定位是:

  • resultType用来处理非常简单的结果集,就是列名能够与pojo属性匹配的的结果集。如果你只需要查询一个班级的简单情况,那么用这个再合适不过了。

我们很简单就可以使用下列操作:

当然你也可以如上述所说使用resultMap:

然后将上面的resultType转换为resultMap即可,请注意我上面两种需要处理字段的驼峰风格,当然你可以设置Mybatis是否使用驼峰来进行规避。

  • resultMap更擅长来处理复杂映射的结果集。比如一对一、一对多的复杂关系。如果你不但要查询一个班级的情况,附带需要查询班级所在的学校,班级学生的详细情况,甚至是班级男女学生概况。就必须使用resultMap来描述这些映射关系了。这个例子我们来写一下:我们定义一个对上面关系描述的DTO:

对应的映射处理:

当然resultMap还可以像java类一样继承。总之,只要你想,这玩意儿你可以玩出花来。但是注意性能问题,尽量不要过多的嵌套。尽量配置延迟加载lazyLoadingEnabled以达到按需加载。

3. 总结

本文主要通过简单分析resultType与resultMap的相同点与不同点来阐明它们各自的使用场景。更多详尽的使用方法可以去Mybatis的官方文档查看。希望通过本文的讲解让你在实际开发工作中不再困惑更加明了。

留言交流不过瘾?添加微信:zyc_enjoy

根据指引加入各种主题讨论群

每日一问

今日问题

一个屋子有一个门(门是关闭的)和3盏电灯。屋外有3个开关,分别与这3盏灯相连。你可以随意操纵这些开关,可一旦你将门打开,就不能变换开关了。确定每个开关具体管哪盏灯。

(留言说说你的答案吧,明日推文公布答案)

昨日答案

先让A分汤,B和C选,A拿剩下的那一份,再把B和C选的汤合起来,B分汤,C选,B拿剩下的那一份

(昨日问题可在昨日推文的文末查看)

推荐阅读

  • 攻破MySQL性能瓶颈必知的调优技巧

  • 如何模拟将CPU、IO打满?

  • Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化!

  • 用命令行在控制台里玩斗地主,试过没?

  • Spring Boot 面试的十个问题

签到计划

活动介绍:自律到极致-人生才精致:第11期

活动奖励:《中台战略:中台建设与数字商业》

扫描下方二维码,查看本书详情

扫描下放二维码,签到参与

来星球聊聊技术人的斜杠生活

点一点“阅读原文”小惊喜在等你

一文理清Mybatis中resultType与resultMap之间的关系和使用场景相关推荐

  1. [转]MyBatis中resultType与resultMap区别

    MyBatis中关于resultType和resultMap的具体区别如下: MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap. res ...

  2. mybatis中resultType和resultMap的区别

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap resultType是直接表示返回类型的,而resultMap则是对外部ResultM ...

  3. Python中怎样改变集合之间的关系?

    Python中怎样改变集合之间的关系?数学中,两个集合关系的常见操作包括:交集.并集.差集.补集.设A,B是两个集合,集合关系的操作介绍如下: 交集是指属于集合A且属于集合B的元素所组成的集合, 并集 ...

  4. OpenVX中 graph与node之间的关系,以及在CNN中的定位

    OpenVX中 graph与node之间的关系,以及在CNN中的定位 很多小伙伴都知道,OpenVX是用来处理图像的一组API,核心是kernel函数的实现,OpenVX对于图像处理是调用底层硬件的G ...

  5. (1)三相电机中相电压与线电压之间的关系 (2)电机转速,机器速度,电角速度之间的关系(3)磁链估算和磁场定向的定义

    三相电机中相电压与线电压之间的关系 Ua=1/3(2Uab+Ubc) Ub=1/3(Ubc-Uab) Uc=-1/3(Uab+2Ubc) 电机转速,机械速度,电角速度之间的关系 电角速度=机器速度* ...

  6. Mybatis中强大的resultMap

    本文来说下mybatis中的resultMap,在平时的开发中resultType使用的比较多.resultType在解决一对一的关系时候比较方便,但是在设计到多对多的时候,使用resultMap比较 ...

  7. 关于mybatis中mapper文件resultMap中collection和association的使用

    mybatis mapper配置文件结果集映射resultMap中collection属性(一对多关系结果集映射)和association属性(多对一关系结果集映射)理解: collection的使用 ...

  8. mysql resultmap_MySQL数据库:mybatis的resultType和resultMap基础用法

    在MySQL数据库中,resultType和resultMap都是用于返回多行查询.二者不能一起用.区别在于后者能解决复杂查询时定的映射问题(比如有两个表相关联,此时就要用resultMap了),希望 ...

  9. c++ 传入动态参数_一文了解Mybatis中动态SQL的实现

    一.动态SQL简介 MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的 ...

最新文章

  1. Memcache参数
  2. mysql 5.7参数目录_mysql5.7配置
  3. TensorFlow(一)
  4. ai怎么约束每个字的大小_人工智能的约束满意问题
  5. Given a singly linked list where elements are sorted in ascending order, convert it to a height bala
  6. ActiveMQ消息的持久化策略
  7. PBS 作业调度应用
  8. 深入理解JVM一JVM内存模型
  9. git 非空目录添加远程仓库地址
  10. flash关闭硬件加速 关闭自动升级
  11. 9.STC15W408AS单片机EEPROM
  12. Ubuntu16.04定时执行功能
  13. xp系统整个计算机非常慢,xp系统桌面右键菜单非常慢很久才显示的图文方法
  14. Android开发实例详解之IMF(输入法)(Android SDK Sample—SoftKeyboard)
  15. Android 仿微信小程序开屏页加载loading
  16. 教你怎么一下哄好赌气的女朋友​
  17. MIPS递归:斐波那契数列
  18. 汽车管理软件批发,汽车管理软件哪个靠谱?
  19. Router-Link详解
  20. Unity Shader 之图片菱形切割

热门文章

  1. python 找不到ssl模块问题 no module named _ssl
  2. 图解 二叉查找树 红黑树
  3. centos7最小安装没有 ifconfig netstat 命令
  4. 内存分配函数 ExAllocatePool ExAllocatePoolWithTag
  5. burp导出html,BurpSuite 的导入和导出
  6. linux 信号 core,Shell 信号发送与捕捉
  7. 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统
  8. duilib combo增加搜索栏_微信对话框上线搜一搜,搜索一步到位!
  9. eBPF bcc实例分析
  10. [总结篇3]Provider_network的含义