mybatis : 标识符无效 报错

本文探讨了SQL动态查询时出现标识符无效的错误,指出问题可能源于前端参数名与SQL字段名不匹配,特别是在多表连接查询中。通过一个具体的例子展示了即使字段名一致,未明确指定表名也会导致错误。解决方案是在IF标签中使用表名.字段名的方式进行条件判断。总结强调在编写动态SQL时要仔细检查并明确字段来源,以避免此类错误。

出现该报错的原因比较多,

1.较常见的就是前端传参参数名与sql中的字段名对不上;

2.今天发现一个较为少见的原因,提示标识符无效,但是字段名、参数名完全一致;

原因:两张表连接查询时,A left join B,涉及多个字段,如果在<if></if>动态标签中传参没有写清楚是哪张表的字段,同样会出现这样的报错;

哪怕只是B表中独有的字段,也会报错,举例:

select a.name as name, a.age as age, a.height as height, b.chengshi as city
from  person_info a 
left join city_info b
on a.cityId = b.eid
<where>

<if test = "city != null">
 and city = #{city}
</where>

上述代码同样报标识符无效;

虽然city字段是将b表中的chenshi字段的别名,但是仍然无法匹配;

正确写法:

select a.name as name, a.age as age, a.height as height, b.chengshi as city
from  person_info a 
left join city_info b
on a.cityId = b.eid
<where>

<if test = "city != null">
 and b.chengshi = #{city}
</where>

如此就不会报错;

总结:

为了避免上述报错,写动态sql时尽量做到:

1.检查仔细;

2使用    表名.字段名    的形式  在if标签中进行判断;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值