一、问题描述
访问接口时,报错:
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}
判空,是我们开发中需要养成的一个非常好的习惯。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/117705.html