java - Mybatis xml resultMap 存在集合和关联问题

标签 java xml spring mybatis

我实际上正在测试mybatis。我真的很喜欢,但是,我想更深入,但我在 resultMap 方面遇到了问题。

实际上我只是想从数据库中获取一个计算机对象,它由多个屏幕和一个塔组成(我代码的另一个对象)

这是我的计算机结果图:

<resultMap type="entity.Computer" id="computer">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <association property="tower" column="towerid" resultMap="towerResult" columnPrefix="t_"/>
        <collection ofType="entity.Screen" property="screen" javaType="ArrayList" resultMap="screenResult" columnPrefix="s_"/>
    </resultMap>

这是请求:

<select id="getcomputerById" resultMap="computer">
        Select c.id, c.name, c.towerid, s.id as s_id, s.size as s_size, s.type as s_type, s.computer_id as s_computer_id, t.id as t_id, t.ram as t_ram, t.stockage as t_stockage from computer c inner join tower t on t.id = c.towerid left join screen s ON s.computer_id = c.id where c.id=#{computerId}
    </select>

使用此代码一切正常。呸呸呸! 我想做的是:

<resultMap type="entity.Computer" id="computer">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <association property="tower" column="towerid" select="getTowerbycomputerid"/>
        <collection ofType="entity.Screen" property="screen" javaType="ArrayList" resultMap="screenResult" columnPrefix="s_"/>
    </resultMap>

唯一不同的是:<association property="tower" column="towerid" select="getTowerbycomputerid"/>

当然,我将我的请求更改为:

<select id="getcomputerById" resultMap="computer">
        Select c.id, c.name, c.towerid, s.id as s_id, s.size as s_size, s.type as s_type, s.computer_id as s_computer_id from computer c inner join tower t on t.id = c.towerid left join screen s ON s.computer_id = c.id where c.id=#{computerId}
    </select>

有与 getTowerbycomputerid 匹配的 xml:

<select id="getTowerbycomputerid" resultMap="towerResult">
        Select t.id, t.ram, t.stockage from tower t inner join computer c on c.towerid=t.id where c.id=#{computerId}
    </select>

结果映射:

<resultMap id="towerResult" type="entity.Tower">
        <id property="id" column="id"/>
        <result property="ram" column="ram"/>
        <result property="stockage" column="stockage"/>
    </resultMap>

我不明白为什么第二个结果图不起作用。 如果我有一对一塔和一对一屏幕 我可以有一个结果图,有两个关联,其中有一个 select="getmethod" 而且效果很好 但是当我将代码更改为具有一对一塔和一对多屏幕时,我不能让 select="getmethod"作为最后一个关联。 对于一对一,它返回 null,但一对多可以工作(使用正确的 select 语句)。

有什么想法吗? 也许无法做到?

谢谢:)

最佳答案

我回答了我的问题,@ave 让我走上了正确的道路。

他的评论:应该是可能的。嵌套选择 getTowerbycomputerid 似乎需要计算机 ID,而您在关联中指定了 column="towerid"。不应该是“id”吗?如果这不是原因,请考虑提供一个像这样的完整示例。

这不完全是这样,但它帮助我找到解决方案。 这是我的要求:

@Select("Select c.id, c.name, c.towerid, s.id as s_id, s.size as s_size, s.type as s_type, s.computer_id as s_computer_id from computer c left join screen s ON s.computer_id = c.id where c.id=#{computerId}")
@ResultMap("ComputerMapper.computer")
public Computer getcomputerById(@Param("computerId") Integer computerId);

这是我的结果映射:

<resultMap type="entity.Computer" id="computer">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <association property="tower" column="towerid" javaType="entity.Tower" select="getTowerbycomputerid"/>
        <collection ofType="entity.Screen" property="screen" javaType="ArrayList" resultMap="screenResult" columnPrefix="s_"/>
    </resultMap>

现在是我的 resultMap 和获取塔的请求:

<resultMap id="towerResult" type="entity.Tower">
        <id property="id" column="id"/>
        <result property="ram" column="ram"/>
        <result property="stockage" column="stockage"/>
    </resultMap>
    <select id="getTowerbycomputerid" resultMap="towerResult">
        Select t.id, t.ram, t.stockage from tower t where t.id = #{towerid}
    </select>

现在一切正常。 在我选择塔之前:

<select id="getTowerbycomputerid" resultMap="towerResult">
            Select t.id, t.ram, t.stockage from tower t inner join computer c on c.towerid = t.id where c.id = #{computerId}
        </select>

到这里就结束了。谢谢@ave:)

关于java - Mybatis xml resultMap 存在集合和关联问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57206050/

相关文章:

java - 使用 ShutdownHandler 关闭 Jetty

java - 使用 xslt 将 xml 转换为 html

java - Spring JpaConfiguration 在运行服务器时给出异常

java - Spring hibernate 模板何时使用,为什么?

sql - 在 SQL Server 中检索具有相同前缀的所有 XML 元素

spring - DDD - 在 Spring Data 中维护单独的域类和实体类

java - 可针对 JAXB 更改的 xml 文件的 XSD 架构

java - 方法在其生命周期中应该只调用一次

java - 为不同惯性系中的表创建不同的数据模型

java - 如何修改多个XML标签的值?