1. 程式人生 > >[Mybatis錯誤集錦] 如何解決兩張表中欄位相同衝突問題

[Mybatis錯誤集錦] 如何解決兩張表中欄位相同衝突問題

問題描述

表結構

t_employee表(員工表)
t_employee表

t_department表(部門表)
t_department表

查詢的xml對映

EmployeeMapper.xml

<resultMap id="BaseAndDepartmentResultMap" type="cn.comman.crud.pojo.Employee">
   <id column="id" javaType="java.lang.Integer" jdbcType="INTEGER" property="id"/>
<result column="name" javaType="java.lang.String" jdbcType="VARCHAR" property="name"/> <result column="gender" javaType="java.lang.String" jdbcType="CHAR" property="gender"/> <result column="email" javaType="java.lang.String" jdbcType="VARCHAR" property="email"/> <result
column="dpt_id" javaType="java.lang.Integer" jdbcType="INTEGER" property="dptId" />
<association property="department" javaType="cn.comman.crud.pojo.Department"> <id column="id" property="id"/> <result column="name" property="name"/> </association> </resultMap
>
<sql id="Base_And_Department_Column_List">
   e.id, e.name, e.gender, e.email, e.dpt_id, d.id, d.name
</sql>
<select id="selectByExampleWithDepartment" resultMap="BaseAndDepartmentResultMap">
   select
   <if test="distinct">
       distinct
   </if>
   <include refid="Base_And_Department_Column_List" />
   from t_employee e
   left join t_department d on e.dpt_id = d.id
   <if test="_parameter != null">
       <include refid="Example_Where_Clause" />
   </if>
   <if test="orderByClause != null">
       order by ${orderByClause}
   </if>
</select>

問題

因為t_employee表和t_department表中都有id和name欄位, 所以按照以上方法在查詢過程中, department的id和name不能正常賦值。

解決方法

解決方案

給查詢的衝突欄位賦予別名,再把resultMap中的column值改為賦予的別名

修改程式碼

<sql id="Base_And_Department_Column_List">
   e.id, e.name, e.gender, e.email, e.dpt_id, d.id, d.name
</sql>

改為

<sql id="Base_And_Department_Column_List">
   e.id, e.name, e.gender, e.email, e.dpt_id, d.id did, d.name dname
</sql>
   <association property="department" javaType="cn.comman.crud.pojo.Department">
       <id column="id" property="id"/>
       <result column="name" property="name"/>
   </association>

改為

   <association property="department" javaType="cn.comman.crud.pojo.Department">
       <id column="did" property="id"/>
       <result column="dname" property="name"/>
   </association>