1、1对1

有2种方式对内嵌Bean设值:

1》关联查询就一条语句。使用association关键字,直接将嵌套对象的映射表的字段赋值内嵌对象。

<association property="teacher" javaType="com.lfy.bean.Teacher"><id property="id" column="t_id"/><result property="name" column="t_name"/>
</association>

2》在同一个mapper中写嵌套bean的映射查询,或者嵌套bean的查询在独立的mapper中。还是使用association关键字。

<!-- getTeacher为同mapper的一个查询。对内嵌teacher属性进行关联查询 --><resultMap type="com.lfy.bean.Classes" id="ClassesResultMap2"><id property="id" column="c_id"/><result property="name" column="c_name"/><association property="teacher" column="teacher_id" select="getTeacher" javaType="com.lfy.bean.Teacher"/>
</resultMap>

<!-- getTeacher为其他mapper的一个查询。对内嵌teacher属性进行关联查询 -->
<resultMap type="com.lfy.bean.Classes" id="ClassesResultMap2"><id property="id" column="c_id"/><result property="name" column="c_name"/><association property="teacher" column="teacher_id" select="com.lfy.mapper.teacherMapper.getTeacher" javaType="com.lfy.bean.Teacher"/>
</resultMap>

    总结:关键字association。

2、1对多

外键一般放置在多方,如学生与班级的关系,多个学生对应一个班级,是多对一的关系,外键应该放在学生表中,即学生表参照了班级表。

但我们现在的需求是,查询出某班级,并查询出班级的所有学生,班级与学生的关系是一对多的关系。

    <!-- 根据id查询班级信息,返回resultMap --><select id="selectClazzById" parameterType="int" resultMap="clazzResultMap">SELECT * FROM tb_clazz  WHERE id = #{id}</select><!-- 映射Clazz对象的resultMap --><resultMap type="com.lfy.bean.Clazz" id="clazzResultMap"><id property="id" column="id"/><result property="code" column="code"/><result property="name" column="name"/><!-- 一对多关联映射:collection fetchType="lazy"表示懒加载  --><collection property="students" javaType="ArrayList"column="id" ofType="com.lfy.bean.Student"select="com.lfy.mapping.StudentMapper.selectStudentByClazzId"fetchType="lazy"><id property="id" column="id"/><result property="name" column="name"/><result property="sex" column="sex"/><result property="age" column="age"/></collection></resultMap>

fetchType属性:有两个取值eager和lazy,eager表示立即加载,是默认的加载形式。在查询Clazz对象的时候,会立即执行关联的selectStudentByClazzId中定义的SQL语句去查询班级的所有学生;lazy表示懒加载,其不会立即发送SQL语句去查询班级的所有学生,而是等到需要使用到班级的students属性时,才会发送SQL语句去查询班级的所有学生信息。

fetch机制更多的是为了性能考虑,如果查询班级时确定会访问班级的所有学生,则该属性应该设置为eager;如果查询班级时只是查询班级信息,有可能不会访问班级的所有学生,则该属性应该设置为lazy。一般情况下,一对多所关联的集合对象,都应该被设置成lazy。

使用懒加载,还需要在Mybatis配置文件中增加如下配置:

总结:关键字collection。

3、多对多

数据库中的多对多关系,推荐使用中间表来维护关系,中间表中的订单id作为外键参照订单表的id,商品id作为外键参照商品表的id。

主要是对前面两种的总和应用。

转载于:https://www.cnblogs.com/ZeroMZ/p/11415836.html

Mybatis-学习笔记(4)1对1、1对多、多对多相关推荐

  1. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  2. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  3. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  4. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  5. ant的下载与安装——mybatis学习笔记之预备篇(一)

    看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...

  6. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

  7. mybatis学习笔记(1)-对原生jdbc程序中的问题总结

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(1)-对原生jdbc程序中的问题总结 标签:mybatis [TOC] 本文总结jdbc编程的一般步骤 ...

  8. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html

  9. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  10. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五

    在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...

最新文章

  1. Welcome Party
  2. 简述原型模型的特点_3D打印硅胶复模手板的步骤和特点有哪些
  3. asp.net php 哪个好,ASP.NET、JSP和PHP究竟哪个好
  4. .Net 4.0并行库实用性演练[1]
  5. 像git一样管理数据,高效的数据管理平台TensorBay来了!
  6. python使用sphinx自动生成文档
  7. 使用Homebrew安装Git与Github在idea中的配置
  8. Python+Appium+夜神模拟器安装与简单运行(1/2)
  9. 图片相似度识别在线_图片相似度计算的几种方法
  10. 计算机绘图说课视频,电气工程制图说课ppt课件
  11. R语言--Cox模型校准曲线原理(一)数据来源
  12. 信号发生器的基本知识
  13. PDF编辑器:Adobe Acrobat XI Pro
  14. 计算机(了解)\注释\变量\数据类型\格式化输出\debug
  15. 中国最缺大学的重点城市
  16. K近邻算法(k-nearest neighbor,KNN)
  17. 净值继续回落,短期弱势难改
  18. 关于IBM笔记本快捷键使用一览表
  19. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第01节 计算属性
  20. PCL点云边界特征检测 (附完整代码 C++)

热门文章

  1. 全网首发:JDK绘制文字:三、绘制句柄的内容是如何定义的
  2. 软件基本功:垃圾代码的共同特征
  3. fatal error: stropts.h: 没有那个文件或目录
  4. 解决办法:编译OpenCV,Open Project无反应
  5. Telepresence修改完善心得
  6. 隋朝之前,扬州指的是现在的南京
  7. Memento(备忘录)
  8. 任务状态段(Task State Segment)
  9. oracle 审计变换表空间_Oracle审计日志和审计策略数据表迁移到新表空间
  10. C语言编译过程总结简版