一般出现这种错误提示代表程序写的有问题,一般是SQL语句不对,主要有以下几种类型:
1.实体类属性和数据库表字段不对应,主要有以下几种类型错误:
- Mapper.xml中配置的resultMap有问题,检查column和property是否对应;column和property的拼写是否有问题。 注:column对应数据库表字段,property对应实体类属性。如图1.1所示:
<resultMap id="enterpriseMap" type="com.fjz.screendata.entity.Enterprise">
<result column="id" property="id"/>
<result column="create_time" property="createTime"/>
<result column="create_user" property="createUser"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="create_dept" property="createDept"/>
<result column="status" property="status"/>
<result column="is_deleted" property="isDeleted"/>
<result column="name" property="name"/>
</resultMap>
图1.1
- SQL语句中表名访问的字段是否在数据库表中存在,如图1.2所示,bdb.dict_value中的dict_value字段如果在bdb对应的blade_dict_biz表中不存在,会导致错误。
图1.2
2.数据表字段和实体类属性的数据类型不一致,或者是在程序或SQL语句中错误的判断逻辑导致字段或属性的数据类型出现问题。
实体类:
private String remark;
Mapper.xml:
<select id='selectInfo'>
select * from table
<where>
<if test="remark != null and remark != 0">
AND remark = #{remark}
</if>
</where>
</select>
注:由于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