MyBatis中如何实现两个外键指向同一个类

在运用MyBatis实现持久层的时候,我发现了一个问题,那就是如果一张表中有两个外键,名字不一样,但是其实指向的是同一个类,例如:在一根光纤FIber上,有两端,两端分别就是光口ODF,命名的时候一个叫ODFPort,一个叫做NextODFPort。怎么实现呢?下面给出我的方法。

先定义好ODFPort和NextODFPort的resultMap:

<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>
然后就是把Fiber的resultMap通过association这个标签把ODFPort和NextODFPort连接起来。

<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连接,每张表之间相对独立,这样也避免了在联合查询的时候,每张表中的个别列名相同冲突。

猜你喜欢

转载自blog.csdn.net/qugename/article/details/26345249