文档章节

Mybatis连结多表表查询数据resultMap结果映射

誓言今生
 誓言今生
发布于 2017/03/20 13:00
字数 900
阅读 903
收藏 1

一、前言                                                                                                                                    

Mybatis实现了 sql与java代码的分离,达到了解耦合的目的,配置sql语句时有个resultType=""的属性,用于定义sql查询返回结果数据类型,但它有 局限性,就是当连表查询的时候,你很难说定义返回的是某一个类型,这时就需要用到一个标签了,那就是resultMap,结果映射.
 

二、从sql查询结果到模型实体                                                                                                     

在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程。

  1. 通过JDBC查询得到ResultSet对象

  2. 遍历ResultSet对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值

  3. 根据ResultMap标签的type属性通过反射实例化领域模型

  4. 根据ResultMap标签的type属性和id、result等标签信息将HashMap中的键值对,填充到领域模型实例中并返回

 

三、ResultMap标签                                                                                                                 

 

id属性:标识resultMap,通过它去识别.

type属性:返回值类型,类的全定向名.

autoMapping属性:值为true(默认)|false,是否自动映射。自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在`resultMap`内明确注明映射关系才会调用对应的setter方法。

四、ResultMap中子标签                                                                                                          

在讲标签时先讲述下数据库中表数据的对应关系,如一对一,一对多,多对多等关系,具体来说,如有一个俱乐部表,一个全员表,一个俱乐部里有许多球员,而许多球员对应一个俱乐部,则俱乐部与球员之间的关系就是一对多与多对一的关系。

 

<collection>子标签:对应表格关系中的多

<association>子标签:对应表格关系中的一

 

五、联结三表示例                                                                                                                       

示例是联结三表,查询结果作为示范,就算联结再多表也能举一反三。这三个表的关系如下图

sql语句联结:http://download.csdn.net/detail/sunrise_zhu/9687991

核心代码:

clubMapper.xml中结果映射

  1. <!-- 结果映射 -->  
  2. <resultMap type="com.sxt.entity.Club" id="clubBean" autoMapping="true">  
  3. <!--column指向数据库列名   property指向pojo对象中字段名-->  
  4.     <result column="cid" property="cid"/>  
  5.     <result column="cname" property="cname"/>  
  6.     <result column="city" property="city"/>  
  7.     <!-- property指的是在bean中字段名 ofType类的全定向名 -->  
  8.     <collection property="players" ofType="com.sxt.entity.Player">  
  9.         <result column="pid" property="pid"/>  
  10.         <result column="pname" property="pname"/>  
  11.         <result column="position" property="position"/>  
  12.         <result column="cid" property="cid"/>  
  13.         <association property="abilities" javaType="com.sxt.entity.Abilities">  
  14.             <result column="aid" property="aid"/>  
  15.             <result column="pid" property="pid"/>  
  16.             <result column="shoot" property="shoot"/>  
  17.         </association>  
  18.     </collection>  
  19. </resultMap>  

clubMapper.xml中sql语句

  1. <select id="joinTwo" resultMap="clubBean">  
  2.     select c.*,p.*,a.*   
  3.     from clubs c   
  4.     join player p  
  5.     on c.cid = p.cid   
  6.     join abilities a   
  7.     on a.pid = p.pid;  
  8. </select>  

playerMapper.xml中的结果映射:

  1. <!-- 结果映射 -->  
  2.     <resultMap type="com.sxt.entity.Player" id="playerBean">  
  3.         <!--column指向数据库列名 property指向pojo对象中字段名 -->  
  4.         <result column="pid" property="pid" />  
  5.         <result column="pname" property="pname" />  
  6.         <result column="position" property="position" />  
  7.         <result column="cid" property="cid" />  
  8.         <association property="club" javaType="com.sxt.entity.Club">  
  9.             <result column="cid" property="cid" />  
  10.             <result column="cname" property="cname" />  
  11.             <result column="city" property="city" />  
  12.         </association>  
  13.         <association property="abilities" javaType="com.sxt.entity.Abilities">  
  14.             <result column="aid" property="aid"/>  
  15.             <result column="pid" property="pid"/>  
  16.             <result column="shoot" property="shoot"/>  
  17.         </association>  
  18.     </resultMap>  

abilitiesMapper.xml结果映射

  1. <!-- 结果映射 -->  
  2.     <resultMap type="com.sxt.entity.Abilities" id="abilitiesBean">  
  3.         <!--column指向数据库列名 property指向pojo对象中字段名 -->  
  4.         <result column="aid" property="aid"/>  
  5.         <result column="pid" property="pid"/>  
  6.         <result column="shoot" property="shoot"/>  
  7.         <association property="player" javaType="com.sxt.entity.Player">  
  8.             <result column="pid" property="pid"/>  
  9.             <result column="pname" property="pname"/>  
  10.             <result column="position" property="position"/>  
  11.             <result column="cid" property="cid"/>  
  12.         </association>  

声明由于失去作者原创链接,因此声明只可以学习交流。

 

本文转载自:

誓言今生
粉丝 0
博文 3
码字总数 3273
作品 0
沈阳
私信 提问
MyBatis之使用resultMap实现高级映射

对于数据库中对表的增删改查操作,我们知道增删改都涉及的是单表,而只有查询操作既可以设计到单表操作又可以涉及到多表操作,所以对于输入映射parameterType而言是没有所谓的高级映射的,也...

瑟青豆
2018/06/20
66
0
Mybatis(二)返回值、表查询

之前对Mybatis有了初步的学习与使用,最近学习ssh发现ssh太重,我个人觉得,像hibernate事务,很多情况下没有使用,而缓存,大部分时候也用不上,需要用到的场景,完全可以自已开发,更轻,而...

什么都不懂的小石
2017/12/02
0
0
Mybatis通过一条SQL查出关联的对象

Mybatis通过一条SQL查出关联的对象 以往在做对象的查询时如果需要把关联的对象一起查出来是通过resultMap的子查询来进行的。通过子查询来进行的关联对象的查询时,Mybatis会重新发起一次数据...

234390216
2017/04/27
0
0
Mybatis应用学习(3)——Mapper映射文件编写

Mybatis的映射配置文件Mapper.xml 1.1 输入参数映射 1. 在Mapper映射文件中,可以通过parameterType指定SQL语句所要输入参数的类型,类型可以是java简单类型(String和七个基本类型以及基本类...

江左煤郎
2018/11/25
28
0
MyBatis关联查询,商品跟订单这种多关系关联查询其实很简单的

  好程序员Java学习路线分享MyBatis之关联查询,我们进行数据库查询时往往需要的不止一张表的数据,需要将多张表的数据一起查询出来,大家学习过数据库的连接查询,那么在MyBatis中如何将有...

Java高级进阶架构师
09/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
16分钟前
2
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
26分钟前
2
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
35分钟前
5
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部