一般出现这种错误提示代表程序写的有问题,一般是SQL语句不对,主要有以下几种类型:
1.实体类属性和数据库表字段不对应,主要有以下几种类型错误:
- Mapper.xml中配置的resultMap有问题,检查column和property是否对应;column和property的拼写是否有问题。 注:column对应数据库表字段,property对应实体类属性。如图1.1所示:
图1.1
- SQL语句中表名访问的字段是否在数据库表中存在,如图1.2所示,bdb.dict_value中的dict_value字段如果在bdb对应的blade_dict_biz表中不存在,会导致错误。
图1.2
2.数据表字段和实体类属性的数据类型不一致,或者是在程序或SQL语句中错误的判断逻辑导致字段或属性的数据类型出现问题。
实体类:
private String remark;
Mapper.xml:
select * from table AND remark = #{remark}
注:由于remark为String类型,但select标签中由于使用了 remark != 0的判断,导致程序把remark当做数字来处理,但String是不能进行!= 0的操作的。
3.Mapper.xml中SQL语句from后面的表名不对,检查表名拼写有无错误,以及表名是否和实体类对应的表名一致。
4.Mapper.xml中SQL语句语法有问题,可能包括:
- SQL语句中各子句的顺序写错了,关于SQL语句的书写以及子句执行流程可参考:SQL语句执行顺序,select、from、where、group by、having、order by语句位置及功能详解https://blog.csdn.net/qq_44973310/article/details/126986263?spm=1001.2014.3001.5502
- SQL语句中的标点符号出现位置,如图2.1所示,case when标签之间不能出现逗号,但写了逗号导致错误。注:这种错误排查起来很耗费时间,平时一定要注意SQL书写规范。
图2.1