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

一、前言

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中结果映射
<!-- 结果映射 -->
<resultMap type="com.sxt.entity.Club" id="clubBean" autoMapping="true">
<!--column指向数据库列名   property指向pojo对象中字段名--><result column="cid" property="cid"/><result column="cname" property="cname"/><result column="city" property="city"/><!-- property指的是在bean中字段名 ofType类的全定向名 --><collection property="players" ofType="com.sxt.entity.Player"><result column="pid" property="pid"/><result column="pname" property="pname"/><result column="position" property="position"/><result column="cid" property="cid"/><association property="abilities" javaType="com.sxt.entity.Abilities"><result column="aid" property="aid"/><result column="pid" property="pid"/><result column="shoot" property="shoot"/></association></collection>
</resultMap>

clubMapper.xml中sql语句

<select id="joinTwo" resultMap="clubBean">select c.*,p.*,a.* from clubs c join player pon c.cid = p.cid join abilities a on a.pid = p.pid;
</select>

playerMapper.xml中的结果映射:

<!-- 结果映射 --><resultMap type="com.sxt.entity.Player" id="playerBean"><!--column指向数据库列名 property指向pojo对象中字段名 --><result column="pid" property="pid" /><result column="pname" property="pname" /><result column="position" property="position" /><result column="cid" property="cid" /><association property="club" javaType="com.sxt.entity.Club"><result column="cid" property="cid" /><result column="cname" property="cname" /><result column="city" property="city" /></association><association property="abilities" javaType="com.sxt.entity.Abilities"><result column="aid" property="aid"/><result column="pid" property="pid"/><result column="shoot" property="shoot"/></association></resultMap>

abilitiesMapper.xml结果映射

<!-- 结果映射 --><resultMap type="com.sxt.entity.Abilities" id="abilitiesBean"><!--column指向数据库列名 property指向pojo对象中字段名 --><result column="aid" property="aid"/><result column="pid" property="pid"/><result column="shoot" property="shoot"/><association property="player" javaType="com.sxt.entity.Player"><result column="pid" property="pid"/><result column="pname" property="pname"/><result column="position" property="position"/><result column="cid" property="cid"/></association>

五、参考文件     

http://www.cnblogs.com/fsjohnhuang/p/4076592.html

Mybatis连3表查询数据resultMap结果映射相关推荐

  1. MyBatis 实现多表查询、resultMap 标签、MyBatis 注解、mybatis运行原理

    内容 Auto Mapping 单表实现(别名方式) 实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 一.MyBatis 实现多表查询 Myba ...

  2. Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  3. 【Mybatis】MyBatis 实现多表查询

    大纲 Auto Mapping 单表实现(别名方式) <resultMap>实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 准备:创 ...

  4. 【MyBatis】多表查询

    MyBatis的多表查询 表之间的关系:一对多,多对一,一对一,多对多. 一对多:一个班级对应多个学生 多对一:多个学生对应一个班级 一对一:一个人对应一个身份证号码 多对多:一个订单可以有多个商品, ...

  5. mybatis分页多表查询

    mybatis分页多表查询 我们常遇到一种情况,数据量比较大,如果使用前台分页,在前台如果有权限,有逻辑判断,都会大大降低页面加载的速度,我们需要分页,单表查询的网上方法很多,这里就不赘余了,多表关联 ...

  6. Mybatis实现关联表查询

    Mybatis实现关联表查询 6.1. 一对一关联 1). 提出需求 根据班级 id 查询班级信息(带老师的信息) 2). 创建表和数据 [](javascript:void(0)

  7. MySQL 实现多张无关联表查询数据并分页

    MySQL 实现多张无关联表查询数据并分页 1.功能需求 在三张没有主外键关联的表中取出自己想要的数据,并且分页. 2.数据库表结构 水果表: 坚果表: 饮料表: 主要用UNION AL UNION ...

  8. Mybatis系列(三):Mybatis实现关联表查询

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...

  9. Mybatis+MySQL动态分页查询数据经典案例

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

最新文章

  1. CentOS6.*安装gitolite
  2. 总结了 90 条写 Python 程序的建议
  3. 关于SQL Server 数据库归档的一些思考和改进
  4. HBase源码分析之HRegion上compact流程分析(三)
  5. 在Java 8 Lambda中创建自己的循环结构
  6. chrome浏览器win10下显示不清晰怎么办
  7. Github Actions
  8. jquery remove() empty()
  9. 用SqlConnectionStringBuilder修改连接超时时间
  10. Xcode设置编译链接-framework CoreFoundation
  11. python学习笔记 程序执行过程 基本数据类型
  12. C语言笔记 · ASCII码表
  13. Paper和陈丹琦撞车是一种怎样的体验
  14. EditText属性简单描述
  15. 用户金字塔模型的应用:知乎案例分析
  16. layabox 打印_Layabox 集成指南
  17. python爬取网易云音乐评论并进行情感分析_使用python3爬取网易云音乐的评论
  18. vue项目引入markdown
  19. 马云称每天都睡不好,担心公司被淘汰;王老吉回应喝凉茶延长寿命丨价值早报
  20. XLA编译器用于JIT加速

热门文章

  1. LinearLayout中控件不能居右对齐
  2. vue学习十八(axios)
  3. GIC spec之介绍5
  4. 笔记本电脑什么牌子好?除了配置还应该关注哪些方面?
  5. Java中POJO、VO、DTO、PO、Entity、domain的区别
  6. 感染源在哪里?-java题解
  7. 2020精辟到噎死人的句子,太犀利了,经典
  8. 准备斑马网络一面(1)
  9. 服务器文件夹搜索不到,如何将文件夹添加到VSO 2015构建服务器中的搜索路径
  10. Pimp_my_Z1