1. 程式人生 > >Mybatis多表鏈接查詢重復字段問題

Mybatis多表鏈接查詢重復字段問題

spa pac 配置 IT bpmn SQ left join model pack

A表和B表一對多的關系

A表

技術分享圖片

B表

技術分享圖片

A表和C表也是一對多關系

C表

技術分享圖片

我現在向查詢出A表的所有字段和B表的name字段,C表的name字段

這是我錯誤的sql語句,可以看出我沒有查B表和C表的id字段,這也是我後來查出重復字段的原因

select a.*,b.name,c.name from A a left join B b on a.name=b.name left join C c on a.name=c.name 

我的Mybatis配置文件是通過resultMap接收返回的對象

<resultMap id="BpmNodeTemplate"
type="com.major.workflow.persistence.model.BpmNodeTemplate"> <id property="id" column="id" jdbcType="VARCHAR"/> <result property="type" column="type" jdbcType="VARCHAR"/> <result property="title" column="title" jdbcType="VARCHAR"/> <result property
="description" column="description" jdbcType="VARCHAR"/> <result property="icon" column="icon" jdbcType="VARCHAR"/> <collection property="groupses" ofType="com.major.workflow.persistence.model.BpmNodeGroups"> <id column="g_id" property="id"></id>
<result column="g_name" property="name"></result> <result column="node" property="node"></result> </collection> <collection property="packages" ofType="com.major.workflow.persistence.model.BpmNodePropertyPackages"> <id column="p_id" property="id"></id> <result column="p_name" property="name"></result> <result column="node" property="node"></result> </collection> </resultMap>

可以看出我定義了兩個Collection來接受查詢出來的list對象,也就是B表和C表的name,實體類定義的是list<A>,list<B>,對應的配置文件用collection接收從數據庫查詢出來的數據。

錯誤原因:因為我沒有查出B,C兩表的id所以在resultMap接收數據的時候會將多個相同的name放入collection,最終封裝到list裏面

技術分享圖片

這是我查詢出來的結果,最終封裝的時候lUsertask這個對象的list<A>裏面會出現6個數據(其實我只需要兩個數據即可活動列表和q),list<B>也是一樣

技術分享圖片

解決辦法:把id查出來就行了,resultMap是根據id區分不同的元素,如果你id不同他就會認為你是不同的元素,這個錯誤在很多人看來很簡單就解決了我卻頭疼了好長時間,網上沒有找到解決辦法,所以寫這篇文章希望給和我一樣的朋友一點幫助

Mybatis多表鏈接查詢重復字段問題