当前位置: 首页 > news >正文

mysql association_MyBatis association的两种形式——MyBatis学习笔记之四

一、嵌套的resultMap

这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示。然后 association元素再引用这个resultMap元素。修改上篇博文示例的StudentMapper.xml如下:

select s.id s_id,

s.name s_name,

s.gender s_gender,

s.major s_major,

s.grade s_grade,

t.id t_id,

t.name t_name,

t.gender t_gender,

t.title t_title,

t.research_area t_research_area

from student s left join teacher t

on s.supervisor_id = t.id

where s.id=#{id}

在 这里,为了让select语句更加清晰可读,每个字段都使用了别名。association元素的属性javaType="Teacher"可以不要,不 像上篇博文示例那样,没有此属性即报错。这大概是因为引用的resultMap元素已经指明了映射的类型为“Teacher”。另外,今天偶然发现,把 StudentMapper.xml的encoding属性由“UTF-8”改为“utf8”即可添加中文注释。

运行结果如下:

9afe1f5effce74a43c3267bfdce3171e.png

这种方式的好处是此resultMap元素可在其它地方被重用(可在博文下方附件下载处下载示例源码)。

二、嵌套的select语句

这种方式是使用一条单独的select语句来加载关联的实体(在本例中就是教师实体),然后在association元素中引用此select语句(注:此方法会产生N+1问题,关于这个问题可参考本系列博客中的“MyBatis中的N+1问题”)。修改StudentMapper.xml如下:

select id,name,gender,major,grade,supervisor_id from student where id=#{id}

select id,name,gender,title,research_area

from teacher where id=#{id}

association元素的属性javaType="Teacher"也可以不要,这大概也是因为引用的select语句中已经指明了要用到的resultMap。

执行结果如下(可在博文下方附件下载处下载示例源码):

f21315e2dc2c4acb43797d8b516da090.png

相关文章:

  • mysql 安装 linux debug_Linux 下 Mysql-4.0.26 安装调试问题
  • mysql语句整理_最全的mysql查询语句整理
  • mysql 同步机制_MySQL主从同步机制及同步中的问题处理
  • win8安装mysql出现2503_Win8.1安装msi出现2503错误怎么办?
  • mysql 大表增删查改_MySQL数据表的增删改查操作
  • 组态王如何连接mysql_组态王连接SQL数据库操作步骤
  • mysql blob转换字符串_最全MySQL面试60题和答案
  • 建立MySQL数据库之后_创建Mysql数据库
  • label读取摄像头 pyqt5_PythonPyQt5:摄像机和屏幕切换
  • 怎么获取前台提交数据是几兆_Web怎么获取请求数据,修改响应信息呢?
  • python 动态规划 回溯_回溯算法和动态规划的转化
  • python中xlrd官方_Python中如何用xlrd读取
  • python字符串常用操作字符串_python字符串常用操作
  • matlab 散点图 线性回归图_简单线性回归matlab实现
  • mysql select count(1)_select count(1) 和 select count(*)的区别
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Angular 2 DI - IoC DI - 1
  • ES6语法详解(一)
  • extjs4学习之配置
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java多线程(4):使用线程池执行定时任务
  • markdown编辑器简评
  • Python利用正则抓取网页内容保存到本地
  • Python学习之路16-使用API
  • 判断客户端类型,Android,iOS,PC
  • 温故知新之javascript面向对象
  • FaaS 的简单实践
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # centos7下FFmpeg环境部署记录
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #git 撤消对文件的更改
  • #pragma data_seg 共享数据区(转)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (3)STL算法之搜索
  • (C++17) std算法之执行策略 execution
  • (libusb) usb口自动刷新
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转) Android中ViewStub组件使用
  • (转)Windows2003安全设置/维护
  • (转)关于pipe()的详细解析
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .net Signalr 使用笔记
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)