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不同他就會認為你是不同的元素,這個錯誤在很多人看來很簡單就解決了我卻頭疼了好長時間,網上沒有找到解決辦法,所以寫這篇文章希望給和我一樣的朋友一點幫助