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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM