查询语句配置如下:

<select id="selectCustomerList" resultMap="CustomerDtoMap" parameterType="map">
select * from
(
select <include refid="AliasCustomerColumnList"/>
from customer c
) c
left join display_venue_reserve dvr
on c.c_customer_id = dvr.customer_id where 1=1
<if test="customerMgrId != null">
and c.c_customer_mgr_id = #{customerMgrId}
</if>
<if test="status != null">
and dvr.status = #{status}
</if>
</select>

resultMap配置如下

<resultMap id="CustomerDtoMap" type="com.al.ec.showroom.dto.customer.CustomerDto" extends="AliasBaseResultMap">
<collection property="displayVenueReserveDtoList" ofType="com.al.ec.showroom.dto.display.DisplayVenueReserveDto">
<association property="displayVenueReserve" column="VENUE_RESERVE_ID" javaType="com.al.ec.showroom.model.display.DisplayVenueReserve"
resultMap="com.al.ec.showroom.mapper.display.DisplayVenueReserveMapper.BaseResultMap">
</association>
</collection>
</resultMap>

查询出结果如下:

只有一条记录,但是数据库直接执行语句是有多条记录的

经过很多轮的改代码研究,发现是因为

<collection property="displayVenueReserveDtoList" ofType="com.al.ec.showroom.dto.display.DisplayVenueReserveDto">
<association property="displayVenueReserve" column="VENUE_RESERVE_ID" javaType="com.al.ec.showroom.model.display.DisplayVenueReserve"
resultMap="com.al.ec.showroom.mapper.display.DisplayVenueReserveMapper.BaseResultMap">
</association>
</collection>
需要在collection节点下添加
<id column="dvr_VENUE_RESERVE_ID" property="venueReserveId" jdbcType="DECIMAL"></id>

更改后代码如下

<resultMap id="CustomerDtoMap" type="com.al.ec.showroom.dto.customer.CustomerDto" extends="AliasBaseResultMap">
<collection property="displayVenueReserveDtoList" ofType="com.al.ec.showroom.dto.display.DisplayVenueReserveDto">
<id column="VENUE_RESERVE_ID" property="venueReserveId" jdbcType="DECIMAL"></id>
<association property="displayVenueReserve" column="VENUE_RESERVE_ID" javaType="com.al.ec.showroom.model.display.DisplayVenueReserve"
resultMap="com.al.ec.showroom.mapper.display.DisplayVenueReserveMapper.AliasBaseResultMap">
</association>
</collection>
</resultMap>

一直以为<association>节点有column属性就可以作为主键就可以了。。。。原来是需要在<collection>下添加id子节点

查询结果如下

但是对于这样配置的原理还不是很了解,如果知道的大神希望能在评论里给出回复,感谢

小白,刚接触mybatis不久,记录在此,谨记于心~~

mybatis 配置返回集合collection时只有一条记录的更多相关文章

  1. mybatis配置-返回date类型丢失时间

    此博客仅作于平时开发所遇到的问题记录,不做他用,描述可能不好,自己看懂即可~~ resultMap配置返回时间类型时,发现数据库时间是精确到秒的,但是返回给javabean之后丢失时分秒的信息,只有日 ...

  2. Mybatis配置返回为修改影响条数

    mybatis配置返回为修改影响条数,修改jdbc连接如下即可:添加useAffectedRows=true配置. jdbc:mysql://jdbc.host/{jdbc.db}?useAffect ...

  3. MyBatis面试题集合,90%会遇到这些问题

    1.#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. ...

  4. 深入浅出mybatis之返回主键ID

    目录 添加单一记录时返回主键ID 在映射器中配置获取记录主键值 获取新添加记录主键字段值 添加批量记录时返回主键ID 获取主键ID实现原理 添加记录后获取主键ID,这是一个很常见的需求,特别是在一次前 ...

  5. 解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错

    前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" ,然后使用 jackson @ResponseBody 返 ...

  6. Mybatis select返回值为map时,选取表字段的两列作为key,value

    项目需要从ibatis升级到MyBatis,dao中有一个方法返回Map类型,具体是查询语句查询两个字段,将结果列表字段A的值作为key字段B的值作为value存入Map中作为结果返回: ibatis ...

  7. 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。

    package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...

  8. Mybatis配置

      首先导入mybatis-3.2.3.jar包 还有连接数据库的驱动包   工程中必须导入的三个包(对应的包附件中可以下载):   mybatis-3.2.3.jar sqljdbc.jar log ...

  9. Mybatis(三)返回值

    Mybatis返回值 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则 ...

随机推荐

  1. Go语言异常处理defer\panic\recover

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...

  2. jQuery-1.9.1源码分析系列(八) 属性操作

    jQuery的属性操作主要包括 jQuery.fn.val jQuery.fn.attr jQuery.fn.removeAttr jQuery.fn.prop jQuery.fn.removePro ...

  3. 【C#公共帮助类】ZipHelper 压缩和解压帮助类,经过实战总结出来的代码

    关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播分享,必须保持原作者的信息,但禁止将该 ...

  4. EC笔记,第二部分:6.若不想使用编译器默认生成的函数,就该明确拒绝

    6.若不想使用编译器默认生成的函数,就该明确拒绝 1.有的时候不希望对象被复制和赋值,那么就把复制构造函数与赋值运算符放在private:中,但是这两个函数是否需要实现呢?假设实现了,那么你的类成员方 ...

  5. js promise chain

    新的标准里增加了原生的Promise. 这里只讨论链式使用的情况,思考一下其中的细节部分. 一,关于 then() 和 catch() 的复习 then() 和 catch() 的参数里可以放置 ca ...

  6. UnitOfWork以及其在ABP中的应用

    Unit Of Work(UoW)模式在企业应用架构中被广泛使用,它能够将Domain Model中对象状态的变化收集起来,并在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据 ...

  7. PHP 小数点保留两位

    最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...

  8. GJM :动作手游实时PVP 帧同步(客户端)[转载]

    原帖地址:http://gad.qq.com/article/detail/7171195 原文作者:唐声福  原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 1.概述 1.1.基于U ...

  9. kafka-0.10.0官网翻译(一)入门指南

    1.1 IntroductionKafka is a distributed streaming platform. What exactly does that mean?kafka是一个分布式的流 ...

  10. CSS Hack解决浏览器IE部分属性兼容性问题

    1.Css Hack 不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持.解析不一样,导致在不同浏览器的环境中呈现出不 ...