亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有集合和關聯問題的 Mybatis xml resultMap

帶有集合和關聯問題的 Mybatis xml resultMap

小怪獸愛吃肉 2023-04-19 16:22:24
我實際上是在測試 mybatis。我真的很喜歡,但是,我想更深入地了解 resultMap,但我遇到了問題。實際上我只想從數據庫中獲取一個計算機對象,它由多個屏幕和一個塔組成(我的代碼的另一個對象)這是我的計算機 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>使用此代碼,一切正常。BUTTTTTTTTT!我想做的是:<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>我不明白為什么第二個結果圖不起作用。如果我有一對一的塔和一對一的屏幕,我可以有一個結果圖,有兩個關聯,在它們中有一個 select="getmethod" 并且它完美地工作但是當我改變我的代碼以有一個一對一的塔和一個多屏幕,我不能讓 select="getmethod" 用于最后一個關聯。它為一對一返回 null,但一對多工作(使用正確的 select 語句)。任何想法 ?也許這是不可能的?
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

不完全是這樣,但它可以幫助找到解決方案。有相應的要求:


@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>

這就是結局。


查看完整回答
反對 回復 2023-04-19
  • 1 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號