项目场景:
Mybatis使用关联查询由于表名字段重复导致的问题
问题描述:
下面代码可以看出Brand和Category表中有了重复的name字段。当我们进行关联查询时,发现category的name属性竟然赋予了外边brand的name的值。
@Data
public class Brand {
private Long brandId;
private String name;
private String descript;
private Category category;
}
@Data
public class Category{
private Long id; //表:cat_id
private String name; //表:name
private Long pid; //表:parent_cid
}
原因分析:
在使用mybatis进行多表联合查询时,如果两张表中的字段名称形同,会出现无法正常映射的问题
解决方案:
改写sql语句给这个重复的字段起别名,然后映射的字段名也相应修改成别名即可
<resultMap id="brandCategoryMap" type="com.zcc.domain.Brand">
<id property="brandId" column="brand_id"></id>
<result property="name" column="name"></result>
<result property="descript" column="descript"></result>
<association property="category" javaType="com.zcc.domain.Category">
<id property="id" column="cat_id"></id>
<result property="name" column="cname"></result>
<result property="pid" column="parent_cid"></result>
</association>
</resultMap>
<select id="selectBrandAndCategory" resultMap="brandCategoryMap">
select pb.*,pc.cat_id,pc.name cname,pc.parent_cid
from pms_brand pb join pms_category pc on pb.catalog_id=pc.cat_id
where brand_id=#{brandId}
</select>