原创

mybatis使用报错记录

1、Error setting non null for parameter #1 with JdbcType null

详细错误信息

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘tel’, mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘null’}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

刚开始百思不得其解,仔细查看方法,没错呀!代码如下:

只得百度了,然后在这篇文章中看到如下说法:
https://blog.csdn.net/hebsun/article/details/84399483

@Delete("DELETE FROM t_xxx WHERE uid =’#{deviceSn}’ ")
注意,使用#{}的不能用这个双引号’’。真是画蛇添足啊。

我这里尝试了一下,结果还是报错:
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘%‘14567890987’% and recodStatus=1 order by createTime desc limit 1’ at line 1
这个错误就比较明显了,sql 语句错误,很明显like 不能这么用了,
必须要使用 CONCAT(’%’,#{0},’%’) 进行拼接,结合下面的帖子改了一下,
问题解决了
https://blog.csdn.net/weixin_38570967/article/details/80753489

修改如下:

在这里插入图片描述

在mybatis 中like 比较特殊,很多时候不能采用常规的方式进行参数传递,必须用concat
进行拼接才能得到正确的结果

2、参数别名

nested exception is org.apache.ibatis.binding.BindingException: Parameter 'gidRuleRelationDOList' not found. Available parameters are [collection, list]

对于参数个数超过一个或非基本数据类型的参数,尽量使用别名

3、sql中的参数变量名

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named xxx

sql中的参数变量名是DO的变量名,非数据库中的字段名

4、关于like的补充

  • #{}是参数化处理
  • ${}是占位符替换

对于like的场景

#{}需要 concat('%',#{}.'%')
${} 可以直接 '%${}%'

正文到此结束
本文目录