MyBatis中如何實現兩個外來鍵指向同一個類
阿新 • • 發佈:2019-01-22
在運用MyBatis實現持久層的時候,我發現了一個問題,那就是如果一張表中有兩個外來鍵,名字不一樣,但是其實指向的是同一個類,例如:在一根光纖FIber上,有兩端,兩端分別就是光口ODF,命名的時候一個叫ODFPort,一個叫做NextODFPort。怎麼實現呢?下面給出我的方法。
先定義好ODFPort和NextODFPort的resultMap:
然後就是把Fiber的resultMap通過association這個標籤把ODFPort和NextODFPort連線起來。<resultMap type="ODFPort" id="resultODFPort"> <id column="odfportid" property="odfportid" /> <result column="odfp_serialnum" property="serialnum" /> <result column="odfp_status" property="status" /> </resultMap> <resultMap type="ODFPort" id="resultNextODFPort"> <id column="odfportid" property="odfportid" /> <result column="odfp_serialnum" property="serialnum" /> <result column="odfp_status" property="status" /> </resultMap> <select id="selectODFPort" parameterType="int" resultMap="resultODFPort"> select odfportid,serialnum as odfp_serialnum,status as odfp_status from odfport where odfportid=#{odfportid} </select> <select id="selectNextODFPort" parameterType="int" resultMap="resultNextODFPort"> select odfportid,serialnum as odfp_serialnum,status as odfp_status from odfport where odfportid=#{odfportid} </select>
<resultMap type="FiberPort" id="resultFiberPort"> <id column="fiberportid" property="fiberportid" /> <result column="fiberport_status" property="status" /> <association property="odfport" column="odfportid" select="selectODFPort" /> <association property="nextodfport" column="nextodfportid" select="selectNextODFPort" /> </resultMap>
這種辦法還有另外一些好處,這樣把每張表都分開寫一個select,結構會很清楚,每張表只通過association連線,每張表之間相對獨立,這樣也避免了在聯合查詢的時候,每張表中的個別列名相同衝突。