在MyBatis中,多表关系没有像Hibernate中体现的那么明显,关系型数据库表与表之间的关系主要有:

1、一对一关系

账户表-----账户详情表

2、多对一关系

学生和班级

3、一对多关系

班级和学生

4、多对多关系

学生和课程

而在myBatis中只需记得2个标签即可实现多表关系:

1、association标记一对一或多对一

association其实就是标记当前的属性是一个对象,一般可用于一对一或多对一

<!—实现两张表的一对一关系查询映射 -->
<select id=”query” resultMap=”ws2”>
select w.*,h.id husid,h.name hname,h,age hage from tb_wife w left join tb_husband h on w.hid=h.id
</select>
<resultMap type=”Wife” id=”ws2”>
<id property=”id” column=”id”/>
<result property=”name” column=”name”/>
<result property=”hobby” column=”hobby”/>
<!—嵌套对象,通过联结查询获取结果 -->
<association property=”husband” javaType=”Husband”>
<id property=”id” column=”husid”/>
<result property=”name” column=”hname”/>
<result property=”age” column=”hage”/>
</association>
</resultMap>

association标记一对一或多对一

一对一可以,多对一一样,其中javaType标记的属性的数据类型,不可省略。

2、collection实现一对多或多对多

该标签标记当前属性是一个集合,内容通过SQL查询而来。

下面配置体现一对多的关系实现:

<select id=”query1” resultMap=”myhs2”>select h.*,c.id cid,c.name cname,c.infant from tb_husband h left join tb_child c on h.id=c.hid
</select>
<resultMap type=”Husband” id=”myhs2”>
<id property=”id” column=”id”/>
<result property=”name” column=”name”/>
<result property=”age” column=”age”/>
<!-- 嵌套集合-->
<collection property=”childs” ofType=”Child”><id property=”id” column=”cid”/><result property=”name” column=”cname”/><result property=”infant” column=”infant”/></collection>
<resultMap>

collection实现一对多或多对多

其中,ofType:为集合中泛型的数据类型,也就是多的一方对应的类名。

3、collection和association嵌套使用

这个标签可以嵌套在一起使用,一般用来表达多对多的关系映射中:

<select id=”query” parameterType=”int” resultMap=”mp1”>select s.*,st.id stid,st.days,t.id teaid,t.name tname from tb_student s left join tb_studentrelation st on s.id=st.sid left join tb_teacher t on t.id=st.tid where s.id=#{id}
</select>
<!-- 多对多的中间表的关系-->
<resultMap type=”Student” id=”mp1”>
<id property=”id” column=”id”/>
<result property=”name” column=”name”/>
<!--和中间表存在一对多-->
<collection property=”list” ofType=”StudentRelation”><id property=”id” column=”stid”/><result property=”days” column=”days”/><!-- 中间表和教师表存在多对一--><association property=”teacher” javaType=”Teacher”><id property=”id” column=”teaid”/><result property=”name” column=”tname”/></association></collection>
<resultMap>

collection和association嵌套使用

转载于:https://www.cnblogs.com/arrows/p/10382405.html

七、MyBatis教程之四多表关系的实现相关推荐

  1. MyBatis教程– CRUD操作和映射关系–第2部分

    为了说明这一点,我们正在考虑以下示例域模型: 会有用户,每个用户可能都有一个博客,每个博客可以包含零个或多个帖子. 这三个表的数据库结构如下: CREATE TABLE user (user_id i ...

  2. MyBatis教程– CRUD操作和映射关系–第1部分

    CRUD操作 MyBatis是一个SQL Mapper工具,与直接使用JDBC相比,它极大地简化了数据库编程. 步骤1:创建一个Maven项目并配置MyBatis依赖项. <project xm ...

  3. MySQL基础教程 包含SQL语句、约束、表关系、设计范式、多表、事务等

    简介 数据库 ​ 数据库(Database):是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. ​ 我们也可以将数据存 ...

  4. 001 spring5框架:java类工程,IOC:实体类表示表关系,AOP,JdbcTemplate模板,事务操作,Spring5 框架新功能:日志,为空注解,函数式风格,juint,Webflux

    1. Spring5 框架(Spring5 Framework)介绍 1.1 概念 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spri ...

  5. Mybatis教程-实战看这一篇就够了

    推荐SpringCloud教程:https://blog.csdn.net/hellozpc/article/details/83692496 推荐Guava Cache教程:https://blog ...

  6. 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析

    [OpenCV入门教程之四] ROI区域图像叠加&初级图像混合 全剖析 浅墨_毛星云 2014-03-10 12:48:05 157425 收藏 19 最后发布:2014-03-10 12:4 ...

  7. Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序

    Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(一) 原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 (以后比较长的部 ...

  8. 【MyBatis教程】mybatis框架超全面详解总结

    目录 一.什么是MyBatis 二.Mybatis相对JDBC有哪些优势 三.Mybatis框架的原理介绍 四.Mybatis全局配置文件 1.全局配置文件的类容和顺序 五.映射文件 1.输入映射pa ...

  9. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

最新文章

  1. 论新时代软件测试人员的工作之道(一)之一个故事
  2. 彻底给你讲清楚分布式事务原理
  3. 机器学习之类别性特征
  4. 【Linux】【Basis】文件系统
  5. 【引用】phpmyadmin提示Access denied for user 'root'@'localhost' (using password: NO)的解决办法...
  6. python模糊查询_python实现字符串模糊匹配
  7. 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载
  8. 默认权限umask、文件系统权限、特殊权限
  9. 在使用SVN,下载文件到本地时,一定要把全目录下载下来!
  10. [转]加载纹理与使用glGenTextures时应注意的一点(解决吃内存)
  11. python中的函数(全)
  12. python实现批量批量生成二维码并粘贴到另外图片上,便于打印扫描测试
  13. 单片机c语言程序编写步骤,Proteus运行Keil编写的51单片机C语言步骤
  14. 量子计算机需要的物理知识,量子计算机和物理学上的量子力学关系大吗?
  15. Collectors.joining()
  16. 如何关闭Windows Server 2012的IE增强安全配置
  17. android CheckBoxPreference title,summy字体大小设置
  18. 基于单片机的智能晾衣杆
  19. 一个程序员找工作的经历,感动!
  20. php导出excel文件

热门文章

  1. Docker通过Cgroup 资源配置
  2. Docker Compose编排(写法格式及实验)
  3. phpstudy mysql端口_完美解决phpstudy安装后mysql无法启动(无需删除原数据库,无需更改任何配置,无需更改端口)直接共存...
  4. linux进程 面试题,Linux面试题,浅析常见Linux命令面试题及答案
  5. python调用函数示例_python 动态调用函数实例解析
  6. unity双面显示在哪_双面屏努比亚Z20售3499起 4800万三摄+855Plus+4K电池
  7. 统计线段长度.lsp_折线统计图和条形统计图的知识点
  8. php显示控制器不存在,phpcms控制器不存在解决方法
  9. ajax实现滚动刷新,jquery如何实现滚动自动加载
  10. 谷歌Android无障碍套件,谷歌为无障碍套件添加盲文键盘:无需额外硬件就能打字...