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