07. MyBatis 遇到过问题
遇到过的问题
mysql 中判断记录是否存在方法比较
1 | select IFNULL((SELECT 1 FROM gen_table where table_id = 1 limit 1), 0) AS c1 |
结果为 1,则说明记录存在;结果为 0,则说明记录不存在。
Invalid bound statement (not found)出现原因和解决方法
1. mapper.xml 中的 namespace 和实际的 mapper 文件不一致
这个问题其实很好解决,瞪大眼睛,仔仔细细看看,到底对不对应不就好了
2. mapper 接口中的方法名和 mapper.xml 中的 id 标签不一致
这个问题和上个问题解决方法一样,仔细对对嘛,这个再对不出来,面壁思过吧。
3. 若以上两步的问题都没有,但是还是不行,可能原因就是,没有构建进去,打开 target 看看对应的 mapper.xml 文件是否存在
Java 启动报错: java.sql.SQLSyntaxErrorException:Table‘xx.QRTZ_LOCKS‘ doesn‘t exist
通过 docker 安装 mysql、redis 以后启动时候报错,但是数据库里面发现有这个表,奇了怪了,网上一顿搜索发现,原来是 linux 下 mysql 默认是大小写敏感的,但是我们正常使用都是大小写不敏感。
1 | -- 0 是不区分大小写,1 是区分大小写 |
Mybatis 报错 attempted to return null from a method with a primitive return type (int).-看准网
https://www.kanzhun.com/jiaocheng/387212.html
【java】Mybatis 返回 int 类型为空时报错 attempted to return null from a method with a primitive return type (int)_哈士奇-CSDN博客
https://blog.csdn.net/kisscatforever/article/details/77801060
“nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘paymentTypeCode’ in ‘class java.lang.String’”
xml 中 或者在 类方法上写的 sql 语句有问题
SpringBoot 整合 Mybatis 报错 Consider defining a bean of type ‘xx.xx.xx’ in your configur
Consider defining a bean of type ‘com.poly.ncl.chargepaychange.mapper.ChargePayChangeMapper’ in your configuration.
这是由于 springBoot 启动时,没有扫描到 com.alibaba.dao.EntFileDao,而在 com.alibaba.serviceImpl.EntFileServiceImpl 中又使用了 @Autowired private EnfileDao entFileDao 进行装配,所以会发现错误,说没有定义。此时需要在 springBoot 的启动类上,加个注解:@MapperScan(“持久层路径”),这样就会扫描到 com.alibaba.dao.EntFileDao 了。
原文:https://blog.csdn.net/weixin_39800144/article/details/79176373
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\xA7\xA1",…’
1 | ### Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA7\xA1",...' for column 'req_body' at row 1 |
错误原因:参数中带有 emoji 表情,插入数据库时,一些特殊字符如 “🌙”,插入报异常
解决思路:因为字符编码集为 utf8,不支持一些 basic multilingual plane 和补充字符,那么如何让 mysql 存储 emoji 表情,所以需要改成 utf8mb4.
解决方法:
1 | package com.zhangsan.product.utils; |
"nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘cardNumber != null AND cardNumber != ‘’’. Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression: cardNumber != null AND cardNumber != ‘’ [org.apache.ibatis.ognl.ParseException: Encountered
‘cardNumber != null AND cardNumber != ‘’’。
原因是我将 and 大写了。于是修成下述就好了。
‘cardNumber != null and cardNumber != ‘’’。
Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: com.abc.party.constants.xxx
1 | <if test="blogType != null and blogType != ''"> |
去掉后面的空字符串判断即可
1 | <if test="blogType != null"> |
sql 语句的拼接中,判断该类是否为空就行了,我就照着前面的一路 CV,从而忽略了这个错误(根本是没注意到这样的问题)。
参考
SpringBoot 整合 Mybatis 报错:Consider defining a bean of type ‘xx.xx.xx‘ in your configur_IT 云清的博客-CSDN 博客_mybatisplus consider defining a bean of type
https://blog.csdn.net/weixin_39800144/article/details/79176373