错误展示

  • 多表关联查询的返回结果集
	<resultMap id="specialdayAndWorktimeMap type="com.hierway.resm.domain.manage.timeSchedule.SpecialDayWorkTimeVO">
<id column="special_date_id" property="specialDateId"/>
<result column="name" property="name"/>
<result column="date" property="date"/>
<result column="type" property="type"/>
<result column="start_time" property="startTime"/>
<result column="end_time" property="endTime"/>
<collection property="workTimeList" ofType="com.hierway.resm.domain.manage.timeSchedule.WorkTime">
<id column="work_time_id" property="workTimeId"/>
<result column="start_time" property="startTime"/>
<result column="end_time" property="endTime"/>
</collection>
</resultMap>

上面的映射中,返回结果类:SpecialDayWorkTimeVO中定义了7个属性,其中第7个属性是关联查询一对多的对象List。

可以看到在workTime中的属性startTime与endTime和上面的startTime与endTime属性名相同。

  • 查询语句展示
	<select id="getSpecialDayAndWorkTimesByPuId" resultMap="specialdayAndWorktimeMap">
SELECT sd.special_date_id,sd.name,sd.type,sd.date,sd.start_time,sd.end_time,wt.work_time_id,wt.start_time,wt.end_time
FROM powerunit_specialday_relation AS psr
LEFT JOIN special_day AS sd ON psr.special_date_id = sd.special_date_id
LEFT JOIN specailday_worktime_relation AS swr ON sd.special_date_id = swr.special_date_id
LEFT JOIN work_time AS wt ON swr.work_time_id = wt.work_time_id
WHERE psr.pu_id = #{puId}
</select>

在junit中进行mapper层测试,原本数据库中只有一条SpecialDay的记录,并没有关联的WorkTime记录,那么理想的结果是返回的VO对象中

specialDay相关的属性有值,而List是一个长度为0的List。可是测试结果转为Json格式如下所示:

[{"specialDateId":2,"name":"b","date":"2019-04-27","type":0,"startTime":"5:00","endTime":"17:00","workTimeList":[{"workTimeId":null,"startTime":"5:00","endTime":"17:00"}]}]

可以看到,list中含有一条数据,且前面的属性,覆盖了后面具有相同属性名的WorkTime中的startTime与endTime值,结果与测试结果不符合。

解决方案

  • 给workTime表查询结果设置一个区分的别名,同时修改resultMap中标签下的对应的字段名(column元素),展示如下:
	<resultMap id="specialdayAndWorktimeMap" type="com.hierway.resm.domain.manage.timeSchedule.SpecialDayWorkTimeVO">
<id column="special_date_id" property="specialDateId"/>
<result column="name" property="name"/>
<result column="date" property="date"/>
<result column="type" property="type"/>
<result column="start_time" property="startTime"/>
<result column="end_time" property="endTime"/>
<collection property="workTimeList" ofType="com.hierway.resm.domain.manage.timeSchedule.WorkTime">
<id column="work_time_id" property="workTimeId"/>
<result column="wstart_time" property="startTime"/>
<result column="wend_time" property="endTime"/>
</collection>
</resultMap> <!--List<SpecialDayWorkTimeVO> getSpecialDayAndWorkTimesByPuId(Integer puId);-->
<select id="getSpecialDayAndWorkTimesByPuId" resultMap="specialdayAndWorktimeMap">
SELECT sd.special_date_id,sd.name,sd.type,sd.date,sd.start_time,sd.end_time,wt.work_time_id,wt.start_time AS wstart_time ,wt.end_time AS wend_time
FROM powerunit_specialday_relation AS psr
LEFT JOIN special_day AS sd ON psr.special_date_id = sd.special_date_id
LEFT JOIN specailday_worktime_relation AS swr ON sd.special_date_id = swr.special_date_id
LEFT JOIN work_time AS wt ON swr.work_time_id = wt.work_time_id
WHERE psr.pu_id = #{puId}
</select>
  • 相同测试数据如下:
[{"specialDateId":2,"name":"b","date":"2019-04-27","type":0,"startTime":"5:00","endTime":"17:00","workTimeList":[]}]

此次测试结果正确!workTimeList长度为0。

Mybatis多表关联查询字段值覆盖问题的更多相关文章

  1. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  2. JAVA入门[9]-mybatis多表关联查询

    概要 本节要实现的是多表关联查询的简单demo.场景是根据id查询某商品分类信息,并展示该分类下的商品列表. 一.Mysql测试数据 新建表Category(商品分类)和Product(商品),并插入 ...

  3. mybatis多表关联查询之resultMap单个对象

    resultMap的n+1方式实现多表查询(多对一) 实体类 创建班级类(Clazz)和学生类(Student),并在Student中添加一个Clazz类型的属性,用于表示学生的班级信息. mappe ...

  4. MyBatis 多表关联查询

    多表关联查询 一对多 单条SQL实现. //根据部门编号查询出部门和部门成员姓名public dept selectAll() thorws Excatipon; //接口的抽象方法 下面是对应接口的 ...

  5. 5.mybatis一对一表关联查询

    方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集,封装联表查询的数据(去除重复的数据)  SELECT * FROM class c,teacher t WHERE c.tid = t.t ...

  6. spring boot 2使用Mybatis多表关联查询

    模拟业务关系:一个用户user有对应的一个公司company,每个用户有多个账户account. spring boot 2的环境搭建见上文:spring boot 2整合mybatis 一.mysq ...

  7. 三、Mybatis多表关联查询应用

    一对一查询 实现语句:select * from neworder o, user u where o.uid = u.id 实体Order: 接口: 配置: 测试: 一对多查询 实现语句:selec ...

  8. MyBatis学习总结(三)——多表关联查询与动态SQL

    在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...

  9. MyBatis 多表联合查询,字段重复的解决方法

    MyBatis 多表联合查询,两张表中字段重复时,在配置文件中,sql语句联合查询时使用字段别名,resultMap中对应的column属性使用相应的别名: <resultMap type=&q ...

随机推荐

  1. ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)

    引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...

  2. WSGI-mini-web框架服务器

    前期准备: 安装python环境安装pycharm安装MySQL数据库安装pymsql创建一个学生表,存入数据我们只是实现一个非常简单的web服务,前端页面不会专门做页面文件,会在代码中以具体命令的形 ...

  3. 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一). 前面搭建好了自己本地的S ...

  4. MySQL记录操作(单表查询)

    单表查询的语法及关键字执行的优先级 单表查询语法 SELECT DISTINCT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER ...

  5. javaScript 基础知识汇总 (十一)

    1.柯里化和偏函数 偏函数 假如一个函数有两个参数,然后第一个参数我们调用的时候是确定的,那么我门就可以创建一个偏函数来简化参数传递的问题 示例 function mul(a,b){ return a ...

  6. python enumerate用法总结(转)

    原文链接:https://blog.csdn.net/churximi/article/details/51648388 enumerate()说明 enumerate()是python的内置函数en ...

  7. 手把手教你用GoEasy实现Websocket IM聊天

    经常有朋友问起GoEasy如何实现IM,今天就手把手的带大家从头到尾用GoEasy实现一个完整IM聊天,全套代码已经放在了github. 今日的前端技术发展可谓百花争鸣,为了确保本文能帮助到使用任何技 ...

  8. Mycat的简介及安装

    Mycat简介: 1.1Mycat含义 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 一个可以视为“Mysql” ...

  9. Android ListView显示访问WebServices返回的JSON结果

    1.WebServices的返回结果 2.ListView内容布局代码 <?xml version="1.0" encoding="utf-8"?> ...

  10. MassDNS:跨域DNS枚举工具

    MassDNS:跨域DNS枚举工具 simeon 原文地址:http://offsecbyautomation.com/Use-MassDNS/ 工具地址:https://github.com/ble ...