错误展示

  • 多表关联查询的返回结果集
	<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。

最新文章

  1. Trie树-可持久化
  2. IL查看委托
  3. UI组件(思维导图)
  4. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.4
  5. FPGA 设计流程,延迟,时间
  6. tar解压
  7. Winform自定义控件在界面上拖动、滚动鼠标。。会闪烁的解决方法
  8. [BZOJ]2017省队十连测推广赛1 T2.七彩树
  9. springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
  10. win10下caffe安装与mnist测试实验注意点
  11. Java中的队列同步器AQS
  12. Mysql函数大全以及存储过程、函数、触发器、游标等等
  13. binary(binary区分大小写),unsigned,unsigned zerofill关键字介绍
  14. python list初始化技巧
  15. 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容
  16. Ubuntu 安装 .bundle 文件
  17. js基础-语句
  18. 关于MySQL数据库
  19. Mongo副本集的配置以及php node.js连接使用副本集
  20. Java 之 JUC

热门文章

  1. 如何优雅的使用AbpSettings
  2. Android 版的多合一Office应用也正式向iOS开放了
  3. R自带数据集
  4. JavaScript规范----DOM操作
  5. js 面向对象 模拟日历
  6. activated钩子函数
  7. 深入理解Java内存模型(摘)
  8. 【Weiss】【第03章】练习3.9:大整数运算包
  9. SpringBoot AOP处理请求日志处理打印
  10. 超实用的Flask入门基础教程,新手必备!