MyBatis学习笔记(三)关联关系映射

原创 2018年04月15日 21:16:11

在学习mabatis 的过程中,接触到了关联关系映射,认为这是一个很重要的点,所以在这里做一个总结,进而强化知识。

关联关系映射我们说直白一点就是用于处理多表查询嗦得出的结果。此时,mybatis不能把结果集直接映射到我们的POJO上,所以,我们有一种方法便是创建一个VO对象,结果集里有什么列,VO对象里就有什么属性,以此来存放结果。

例如,查询博客表和用户表,一个博客有一个作者

select author.username blog.title from author inner join blog on author.id = blog.author_id where blog.id = 1

那么,VO对象里就应该是


此时VO对象就能接收结果集了

此外,还有一个方法是用的更多的,叫做resultMap,多种方式实现,先看看模型类的样子


一对一:第一种方式

<resultMap type="entity.Blog" id="blogMap">
	<!-- 基本属性 -->
	<id property="id" column="id"/>
	<result property="title" column="title"/>
	<!-- author_id作为外键的基本属性,建立关联联系,被关联属性取代 -->
	<!-- <result property="author_id" column="author_id"/> -->
	<!-- 关联属性:一对一 -->
	<association property="author" javaType="entity.Author">
		<!-- id:建立关系 -->
	        <id property="id" column="author_id"/>
		<result property="username" column="username"/>
		<result property="password" column="password"/>
		<result property="email" column="email"/>
		<result property="bio" column="bio"/>
	</association>
</resultMap>
<select id="findBlogInfo" parameterType="int" resultMap="blogMap">
	select blog.id blog_id,title,author_id,author.id,username,password,email,bio
	from blog left join author on blog.author_id = author.id
	where blog.id = #{id}
</select>

第二种方式就是使用两次resultMap,第一个用于映射关联属性,第二个只需要在association标签里指定接收上一个resultMap就行


第三种方式使用了两次查询,分别去查询两张表里的内容


一对多,与一对一很相似,方法也差不多,唯一不同的是association变成了collection

<resultMap type="entity.Blog" id="blogPostMap">
	<!-- 基本属性 -->
	<id property="id" column="blog_id"/>
	<result property="title" column="title"/>
	<!-- 关联属性:一对多 property的值是对象中的参数名,是一个List,ofType的值是集合里装的值的类型-->
	<collection property="postList" ofType="entity.Post">
		<id property="id" column="post_id"/>
		<result property="subject" column="subject"/>
		<result property="section" column="section"/>
		<result property="body" column="body"/>
	</collection>
</resultMap>
<select id="findBlogAndPost" parameterType="int" resultMap="blogPostMap">
	select blog.id blog_id,title,blog.author_id,post.id post_id,section,subject,body
	from blog left join post on blog.id = post.blog_id 
	where blog.id = #{id}
</select>

一对多加上一对一,直接把一对多加一对一的写法写上去,加一个extends就行


版权声明:本文为博主原创文章,未经允许禁止转载 https://blog.csdn.net/IcyDate/article/details/79951279

A* 算法求解最短路径

   近来不少的朋友问我关于 A* 算法的问题, 目的是写一个搜索最短路径的程序. 这个在鼠标控制精灵运动的游戏中(不算智冠出的那些用鼠标充当键盘方向键的弱智 RPG) 大量使用,尤其是即时战略类的....
  • ghj1976
  • ghj1976
  • 2000-12-08 12:02:00
  • 6108

MyBatis 关联映射之一对一

在客观世界中,对象很少是孤独存在的,如班级与学生之间的关系,学生与课程之间的关系,它们的实例之间可以互相访问,这就是关联关系。MyBatis 的关联映射可以大大简化持久层数据的访问,关联关系的分类如下...
  • u010858605
  • u010858605
  • 2017-04-14 12:07:03
  • 762

MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中的一对一关联映射和一对多(或多对一)关联映射,至于多对多关联映射实质上也是两个一对多(或多对一)关联映射,所以在这里我并...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2017-05-13 20:35:01
  • 1893

Mybatis系列(七)关联映射

Mybatis系列之多表关联映射 引言 之前的文章里有提到过使用Mybatis对数据库单表进行映射,执行增删改查操作。但是在现实的项目中进行数据库建模时,我们要遵循数据库设计范式的要求,会对现实中的...
  • chris_mao
  • chris_mao
  • 2015-10-02 01:11:21
  • 14248

【理论】mybatis对象-关系映射

类与类的关系: 继承(子类,父类) 实现(interface实现) 关联(拥有关系) 组合/聚合(整体与部分:组合是耦合度高的;聚合:耦合度低,整体受影响,部分不被影响)、 ...
  • Munger6
  • Munger6
  • 2017-01-16 20:24:39
  • 313

mybatis和hibernate的区别---Mybatis的学习笔记(四)

具体说明:Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将j...
  • u013991521
  • u013991521
  • 2016-12-04 16:21:22
  • 187

映射关联关系

  • 2008年05月19日 19:02
  • 127KB
  • 下载

Mybatis框架③——关系映射

一.案例背景1.表结构用户表:Userinfo(实体表)userid (主键),username(用户名称),sex(用户性别)····商品表:Product(实体表)pid (主键),pname(商...
  • weixin_40877388
  • weixin_40877388
  • 2018-03-29 21:58:58
  • 23

Mybatis之表之间映射关系总结

1.什么是表之间映射关系
  • ya_1249463314
  • ya_1249463314
  • 2016-12-23 21:58:42
  • 3303

mybatis(五)——mybatis表与表之间的关联映射

一、一对一关联  1.1、提出需求   根据班级id查询班级信息(带老师的信息) 1.2、创建表和数据   创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师...
  • LoveYaozu
  • LoveYaozu
  • 2015-07-22 15:33:25
  • 1167
收藏助手
不良信息举报
您举报文章:MyBatis学习笔记(三)关联关系映射
举报原因:
原因补充:

(最多只允许输入30个字)