在我们使用mybatis去实现多表查询的时候必不可少的要使用映射关系resultMap

在多表查询中的一对多关系中,有两种场景,现在有两张表user表和department表,user为多,department为少,两表是一对多的关系

场景一:查询user表并且把每个user对象的department查询出现来

场景二:查询department表并且把每个department所对应的所有user查询出来

一.使用association解决场景一

在mybatis中,在配置路径中可以通过setting标签来设置是否用默认的映射方法,所谓的默认的映射方法,就是数据库中的字段名称和你javabean中的属性名称一致(就算不一致,也能通过下划线驼峰法达到一致),如果我们想改变这种映射方法尼?可以在配置文件中:

那么在sqlMapping的配置文件中:

首先我们先定义一个resultMap,type属性表示我们要对哪个javabean使用映射,然后在我们想要用这个resultMap的sql语句中使用resultMap这个属性(即使用对应的id)

我这里是创建了两个javabean对象即对应了两张表,分别是user和department(一对多),id是主键的映射规则,result为其他字段的映射规则,这里看最后的两个result,列did(上面的sql中使用了别名,为什么要使用别名?因为user表和department表都有id字段,所以不适用别名的话mybatis会不知道哪个映射哪个),后面的property中写的是department.id,department是user对象中的属性名,所以必须对应上,id为department这个对象的id属性。

以上是使用级联的方式进行映射

下面可以使用association的方式进行映射

 
 

使用association还能实现分步查询,比如说上面的user表和department的联动的查询,我们都是用的select * from user,department或者使用join关键字进行查询,其实我们可以看作是分两步来查询,一个先根据id查出user,再根据查出的user的dept_id字段去查询department表,而用association可以实现分步查询

看代码:

首先我们按照上面说的第一步,根据id查询出user,配置resultMap,在resultMap中有一个association,里面有一个select和column属性,select其实就是第二步中根据查出的user的dept_id去查询出department表,column就是那个第一步查出来的dept_id,而select就是查询Department的mapper

二.使用collection解决场景二:

sql映射文件:

department对应的javabean:

最后输出查询出的department中list<user>的结果:

和association一样,collection也能实现分步查询:

第一步:根据id查询出department

第二步:根据第一步查询出的department的id去查询user表中的user

结果和上面的一样

MyBatis中association,collection多表查询(resultMap高级映射)笔录相关推荐

  1. mybatis中,collection配置后查询只显示一条记录

    描述一下问题: 已知有两个表,一个是user表,一个是address,一(user)对多(address)的关系,在user的实体类里面写属性: private List<Address> ...

  2. Mybatis中的collection、association来处理结果映射

    前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码. 最近几天闲下来,主动把之前的代码优化了一下:) 标签:Java.Mybatis.MySQL 概况:本地系统从另外一个系统得到实体 ...

  3. mybatis中association 和collection 的区别

    mybatis中association 和collection 的区别:https://zhidao.baidu.com/question/1240407172484106299.html 两个实体类 ...

  4. Mybatis中强大的功能元素:resultMap

    转载自  Mybatis中强大的功能元素:resultMap 前言 在Mybatis中,有一个强大的功能元素resultMap.当我们希望将JDBC ResultSets中的数据,转化为合理的Java ...

  5. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  6. Mybatis-plus:单表使用关联查询+ResultMap结果映射

    Mybatis-plus:单表使用关联查询+ResultMap结果映射 一:数据表与实体类 二:mapper与mapper.xml 三:service 四:控制器 五:返回结果 一:数据表与实体类 数 ...

  7. mybatis中association和collection的column传入多个参数值

    在使用 association和collection 进行关联查询的时候 column 参数可能会有多个,如下: 注意: parameterType 一定要是 java.util.Map 转载于:ht ...

  8. Mybatis入门:4(多表查询操作)

    多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...

  9. MyBatis Plus 如何实现连表查询 mybatis plus join

    mybatis-plus-join 项目地址 gitee github 使用方法 安装 Maven <dependency><groupId>com.github.yulich ...

  10. Mybatis中limit用法与分页查询

    数据库使用的是mysql 要想在Mybatis中使用分页查询,首先要清楚mysql中limit的用法. limit a,b a是从第a+1条数据开始,b是指读取几条数据 例如:select * fro ...

最新文章

  1. MyBatis if标签的用法
  2. C语言入门练习 - 第二期 判断语句与循环语句(题解)
  3. 大数据笔记2019.5.11
  4. oracle 唯一索引,唯一约束,主键之间的联系
  5. WPF系列学习之三(路由事件)
  6. 数据结构课程设计---学生信息管理系统
  7. zabbix-3.0.1结合grafana绘图
  8. html元素自己属性代码,jQuery如何操作HTML的元素和属性?(代码详解例)
  9. Oracle trunc和round的区别
  10. 海康录像机能用别的摄像头吗_海康威视录像机NVR如何添加其它品牌(大华)摄像头...
  11. 邮件服务器1---原理以及基本概念
  12. 2018年12月份计算机,CPU天梯图2018年12月最新版 十二月台式电脑CPU性能排行
  13. php自动生成word目录,word怎么自动生成目录
  14. SpringBoot + vue 解决跨域问题
  15. 【技术贴】自己制作支持QQ空间背景音乐的链接教程||QQ免费空间音乐外链自己上传制作教程...
  16. “六合上甲”一体化数据开发平台获“2022 DAMA中国数据治理优秀产品”大奖
  17. oracle rman crosscheck,rman crosscheck作用
  18. 支持向量机(SVM) SMO算法详解
  19. 数组练习题-java
  20. macOS实现词典正常查询维基百科

热门文章

  1. 算法:链表实现插入排序Insertion Sort List
  2. Python 3 从入门到精通 Mac OS
  3. kaggle比赛:房价预测(基于MXNet框架)
  4. Ubiquant LGBM Baseline 九坤量化大赛 版本44
  5. Sudoku-Java
  6. 1-n整数中1出现的次数
  7. 验证服务器的通用性,通用VNFM部署的可行性分析与验证
  8. 白话machine learning之Loss Function
  9. 浅谈算法和数据结构: 四 快速排序
  10. 使用shinydashboard编写高级UI页面(1)