我是靠谱客的博主 瘦瘦荔枝,最近开发中收集的这篇文章主要介绍在使用resultMap对查询进行装填时,出现字段名重复,一致的情况下查询数据重叠的情况,,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题1:在使用resultMap对查询进行装填时,出现字段名重复,一致的情况下查询数据重叠的情况,

举例:我的主表为Teacher 存在属性:name

且存在两个外键student_id, Student表中也存在属性name

school_id,School表中也存在属性name

使用result进行装填:

<resultMap id="TeacherMap" type="Teacher">
     <id property="id" column="id"></id>
     <result property="name" column="name"></result>
     <association property="Student" resultMap="Student">
     </association>
     <association property="School" resultMap="School">
     </association>
 </resultMap>
​
 <resultMap id="Student" type="com.wangqi.model.Student">
        <id property="id" column="ServiceType_id"></id>
        <result property="name" column="name"></result>
 </resultMap>
​
 <resultMap id="School" type="com.wangqi.model.School">
        <id property="id" column="ServiceWriter_id"></id>
        <result property="name" column="name"></result>
 </resultMap>
​
<select id="getAll"  resultMap="ServiceItemMap">
        SELECT SI.*,ST.`name` SW.`NAME` 
        FROM `Teacher` SI
                 LEFT JOIN Student ST ON SI.`student_id`=ST.`id`
                 LEFT JOIN School SW ON SI.`school_id`=SW.`id`
        ORDER BY SI.`id`
 </select>

使用如上装填语句查询语句,所查询结果会出现数据重叠:

    id:1,name:李老师,Student{id=2,name:李老师},School{id:698,name:李老师}

如上所示,发现所有name属性都被主表的name属性覆盖了,原因时,当column相同时,程序默认把他当成同一个属性处理,

同样明显可以发现,我的id属性是对的,因为我的两表中的id都是主表中的外键,有专门的名字:ServiceType_id ,ServiceWriter_id

在column中我就使用了这两个名字,相当于起了别名,所以三个id是不相同的,要解决这个,就需要保证三个的name属性各不相同,就需要起别名:

首先在sql语句中就行更改:  

SELECT SI.*,ST.`name` tname SW.`NAME` wname  
        FROM `Teacher` SI
                LEFT JOIN Student ST ON SI.`student_id`=ST.`id`
                 LEFT JOIN School SW ON SI.`school_id`=SW.`id`
        ORDER BY SI.`id`

如上所示,仔细观察可以发现,我在后面两表中添加了一个别名分别是tname,wname 通过别名我们就可以保证三个表的属性字段不一致,起了别名之后,我们同样需要更改填充语句:

<resultMap id="TeacherMap" type="Teacher">
     <id property="id" column="id"></id>
     <result property="name" column="name"></result>
     <association property="Student" resultMap="Student">
     </association>
     <association property="School" resultMap="School">
     </association>
 </resultMap>
​
 <resultMap id="Student" type="com.wangqi.model.Student">
        <id property="id" column="ServiceType_id"></id>
        <result property="name" column="tname"></result>
 </resultMap>
​
 <resultMap id="School" type="com.wangqi.model.School">
        <id property="id" column="ServiceWriter_id"></id>
        <result property="name" column="wname"></result>
 </resultMap>

将column属性旧值更改为我们新建立的别名,再次进行查询,结果如下

    id:1,name:李老师,Student{id=2,name:王小明},School{id:698,name:家里蹲大学}

发现所有的数据都出现了,同样在属性很多的情况下,如果有字段名相同的情况,可以用这个办法解决,如果字段名不相同,可以不起别名,但为了后续在增加方便,还是写上比较好。

最后

以上就是瘦瘦荔枝为你收集整理的在使用resultMap对查询进行装填时,出现字段名重复,一致的情况下查询数据重叠的情况,的全部内容,希望文章能够帮你解决在使用resultMap对查询进行装填时,出现字段名重复,一致的情况下查询数据重叠的情况,所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部