MyBatisPlus中使用SELECT關聯(lián)查詢時未添加別名報異常的問題分析與修復
發(fā)布時間:2021-11-25 點擊數:978
問題
- 在MyBatisPlus中要使用到關聯(lián)查詢時,如果查詢的主表字段不使用別名,會出現(xiàn)異常:
Column 'id' in field list is ambiguous
原因
- 列ID在字段列表中重復,其實就是兩張表有相同的字段,但是使用時表字段的名稱前沒有加表名,導致指代不明,前面加上前綴別名就沒問題
新問題
- 由于xml中已經用SQL封裝好通用結果列,引用結果列方法:
<include refid="Base_Column_List"></include>
- 那么,如何給結果列添加別名呢?
解決辦法
方法一
- 在定義結果列的SQL語句中為使用了相同表字段的字段添加別名
- 這樣之后使用include標簽引用時就是帶別名引用
方法二
- 使用include標簽的property屬性,為include標簽中的字段添加別名
- 使用 ${ } 占位符參數化的,占位符也可以被用在refid 屬性里.不可以使用 #{ }
- 此處的參數不是調用時傳進來的,不同的屬性值通過包含的實例而變化
<sql id="userColumns"> ${alias}.id,
username,
password </sql> <select id="selectUsers" resultType="map"> select <include refid="userColumns"><property name="alias" value="t1"/></include>, <include refid="userColumns"><property name="alias" value="t2"/></include> from some_table t1
cross join some_table t2 </select>
總結
- 在mybatis的定義中 ,sql標簽節(jié)點是用來定義可重用的SQL代碼段
- 可使用include標簽節(jié)點來包含在其它語句里
- 在include標簽中可以使用property標簽,將屬性包含進來