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不同他就会认为你是不同的元素,这个错误在很多人看来很简单就解决了我却头疼了好长时间,网上没有找到解决办法,所以写这篇文章希望给和我一样的朋友一点帮助

猜你喜欢

转载自www.cnblogs.com/ymzh/p/8989395.html
今日推荐