[Mybatis錯誤集錦] 如何解決兩張表中欄位相同衝突問題
阿新 • • 發佈:2019-02-03
問題描述
表結構
t_employee表(員工表)
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"/> <resultcolumn="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>