一、问题描述

访问接口时,报错:

com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Error: Method queryTotal execution error

org.apache.ibatis.type.TypeException: Error setting non null for parameter 

二、原因

映射文件xml中SQL语法错误,模糊查询语法错误。

三、解决

<!-- 培训单位模糊查询 -->
<if test="entity.unit!=null and entity.unit!=''">
	and unit LIKE CONCAT('%',#{entity.unit,jdbcType=VARCHAR},'%') 
</if>

四、补充-Mybatis的模糊查询

为了避免SQL注入的风险,不讨论使用${}的情况。

使用name举例

1、模糊查询写法一:直接使用#{}占位,"%"使用双引号" " 而不是单引号' '

name LIKE "%"#{name}"%"

2、模糊查询写法二:使用concat拼接

name LIKE CONCAT('%',#{name},'%') 

而在开发中我们通常会使用#{name,jdbcType=VARCHAR}来指定数据类型。为什么呢?

五、补充-jdbcType

因为在MyBatis中,会指定jdbcType类型的参数,当参数为Null时,类型默认设置为jdbcType.OTHER,而MySQL数据库是无法识别该格式,会报错: java.sql.SQLException: JZ006: Caught IOException: java.io.IOException: JZ0SL: Unsupported SQL type

所以,通常我们会给使用jdbcTpye预先指定好数据类型。

#{entity.unit,jdbcType=VARCHAR}

判空,是我们开发中需要养成的一个非常好的习惯。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐