当前位置: 首页 > 知识库问答 >
问题:

使用resultMap在MyBatis中选择查询只获取一行

濮阳祯
2023-03-14

我们正在将MyBatis用于我正在进行的一个项目。我在尝试使用结果图获取结果时遇到了一个问题。

mapper.xml

 <resultMap id="BaseResultMap" type="com.mycompany.myproduct.dto.ChannelMap">
        <id column="CHNL_MAP_ID" property="chnlMapId" jdbcType="DECIMAL" />
        <result column="CHNL_MAP_NM" property="chnlMapNm" jdbcType="VARCHAR" />
        <association property="ctnDlvryPltf"
            resultMap="com.mycompany.myproduct.mapper.ContentDelvryPltfrmMapper.BaseResultMap" />
        <association property="ctnDtr"
            resultMap="com.mycompany.myproduct.mapper.ContentDistributorMapper.BaseResultMap" />
        <association property="region"
            resultMap="com.mycompany.myproduct.mapper.RegionMapper.BaseResultMap" />
    </resultMap>    
    <sql id="Value_Columns_List">
        cmap.CHNL_MAP_NM, cdp.CTN_DLVRY_PLTF_NM,
        cdp.CTN_DLVRY_PLTF_TYP_NM, cdp.CTN_DTR_NM, cd.CTN_DTR_NM,
        cmap.RGN_ID, cmap.CNTRY_ID
    </sql>
    <select id="select" resultMap="BaseResultMap">
        select
        <include refid="Value_Columns_List" />
        FROM
        channel_map cmap,
        (SELECT
        cdpl.ctn_dlvry_pltf_id,cdpl.ctn_dlvry_pltf_nm,
        cdplt.ctn_dlvry_pltf_typ_nm ,cds.ctn_dtr_nm FROM
        content_delvry_pltfrm
        cdpl,
        content_delvry_pltfrm_typ cdplt,
        content_distributor cds
        WHERE
        cdpl.ctn_dlvry_pltf_typ_id =
        cdplt.ctn_dlvry_pltf_typ_id AND
        cdpl.ctn_dtr_id = cds.ctn_dtr_id)
        cdp,
        content_distributor
        cd
        WHERE
        cmap.ctn_dlvry_pltf_id = cdp.ctn_dlvry_pltf_id AND
        cmap.ctn_dtr_id = cd.ctn_dtr_id         
    </select>

在上述文件中需要注意的重要事项是,我们通过不同的别名在选择查询中两次获取名为CTN_DTR_NM的列(请参阅Value_Columns_List)。这是因为channel_map表包含CTN_DTR_NM。通道映射表还包含对另一个包含CTN_DTR_NM的表的引用。

我面临的问题是,即使channel_map表包含多行,select方法也会返回一个只包含一行的List。检查MyBatis日志显示实际查询获取了多行,并且所有获取的行都显示在日志中。我有一种感觉,这个问题与MyBatis获取的结果集映射到我的POJO的方式有关。

共有1个答案

姬欣怡
2023-03-14

只要为chnlMapId属性使用id标记,就可以防止mybatis生成多个具有相同chnlMapId值的对象。?您是否尝试对chnlMapId属性使用结果标记而不是id标记?

 类似资料:
  • 问题内容: 我有两个用于查询表中行的SQL查询,具体取决于类型2或3。 查询1: 查询2: 现在,我只想获取和使用一个查询的值。如何使用一个查询获得计数。有没有办法做到这一点。我正在使用SQLite数据库。 编辑: 我想要分别为和的值,而不是两者都在一起(不使用)。 问题答案: 尝试使用 对于两个变量:

  • 本文向大家介绍Mybatis中的resultType和resultMap查询操作实例详解,包括了Mybatis中的resultType和resultMap查询操作实例详解的使用技巧和注意事项,需要的朋友参考一下 resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的

  • 但是我在遗留系统上有一个具有许多属性的对象,我只想选择几个,尽管我知道选择几个属性通常是很快的。 如果不使用条件查询,这可能吗?

  • 问题内容: 我对SQL还是很陌生,试图绕过它,但是有点令人困惑。这是我正在使用的东西的简化版本。 我有这张桌子叫: 上表是人员清单。他们的parent_id列指的是他们的父母。如果表上没有父母,则他们的parent_id为0。 现在,我希望能够获得每组人的单独列表:祖父母,子女和孙子女。 很容易获得祖父母(拉里和凯文),我可以执行以下查询: 但是当涉及到生子(约翰,拉里,杰森和米尔德雷德)和孙子(

  • 有人愿意帮我完成一个jdbctemplate查询吗? 只需要获取具有唯一id的行,但存在重复的行,因为其他列(如date)具有不同的值。我需要最好得到最长日期,结果集不应该有任何重复项:x个 输出: 这几乎有效,但不完全有效。可悲的是,有重复的。 这是我正在使用的两张桌子。 PS.:使用PostgreSQL

  • 主要内容:resultMap元素的构成,使用Map存储结果集,使用POJO存储结果集,resultType和resultMap的区别resultMap 是 MyBatis 中最复杂的元素,主要用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象。下面我们先从最简单的功能开始介绍。 现有的 MyBatis 版本只支持 resultMap 查询,不支持更新或者保存,更不必说级联的更新、删除和修改。 resultMap元素的构成 resultMap 元素还可以包含以下子元素