最全解决方案:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.
最全解决方案:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.
📢CSDN博客主页:低山高梧桐-致力于做最优质的内容
📢如果涉及到版权问题,烦请联系作者删除!
📢如果文章有谬误,烦请您指出斧正,作者致力于做最好的博客。
📢整合:低山高梧桐 首发于CSDN 欢迎点赞👍收藏⭐留言打扰📝
温馨提示各位:
一定要学会读控制台里的报错信息,能够起到事半功倍的效果!
首先需要检查数据库配置文件中的这几样有没有错误:
1、用户名以及密码
2、驱动名称
3、数据库的ip、端口号和数据库名称
4、数据库中有没有要操作的表
这里的检查要仔细,看一下有没有错字和中文标点
如果不是这些问题,那可能是以下问题,还请逐个排查
一、yml等数据库配置文件重名
报错信息:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'Y7000'@'localhost' (using password: YES)
### The error may exist in file [D:\从零开始\spring\bj-SpringStudy-Mybatis01\bj-SpringMybatis-01\target\classes\com\jcjava\mapper\UserMapper.xml]
### The error may involve com.jcjava.mapper.UserMapper.insertUser
### The error occurred while executing an update
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'Y7000'@'localhost' (using password: YES)
yml中的配置名有冲突,但是概率较小,不推荐先尝试
统一将配置名添加jdbc.
既将原先的配置文件名称
改为下面的配置文件名称,统一添加上jdbc.
最后不要忘记在applicationContext.xml等文件中${}中的数据加上jdbc.
二、单元测试路径名称和实际项目中路径不一样
由于我是使用框架生成的代码,所以生成的路径和测试路径不一样
也就是图中这两个部分的文件树形结构要一致
否则会报错
三、SQL与映射相关
就这里就很多了,需要根据控制台的输出信息逐个排查
(一)可能是SQL语句本身写错了
(二)可能是mybatis的映射文件写错了
如题,结合控制台的输出信息,了解到是MyBatis的映射出现了问题
原博主是标签写错了
https://blog.csdn.net/2302_77182979/article/details/134674756
上面是原博主的链接,请移驾
(三)可能是MyBatis映射文件中映射结果写错了
原因分析
- SQL 语句写错了。此处SQl没问题。
- mapper配置文件中的结果集写错了,假如返回的结果集是多个JavaBean,那么resultType=”javaBean”, 例如:查询Department的List列表,resultType应该写成Department的全类名而不是java.util.List
错误示范:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wu.employee.mapper.IDepartmentMapper">
<!-- 查看部门列表 -->
<select id="getAllDepartment" resultType="java.util.List">
SELECT * FROM department
</select>
</mapper>
正确代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wu.employee.mapper.IDepartmentMapper">
<!-- 查看部门列表 -->
<select id="getAllDepartment" resultType="com.wu.employee.beans.Department">
SELECT * FROM department
</select>
</mapper>
上面的resultType的结果前后不一致
请移驾原博主的博文
https://blog.csdn.net/qq_32106647/article/details/79081278
(四)其他类型
其他的所有类型都基本和MyBatis映射文件有关
所以你需要检查包括但不限于:
1.参数&结果
2.标签
3.SQL本身
所以说,还是需要会读报错信息的,直接领先同辈10年
鸣谢&参考
https://www.cnblogs.com/-LilyBlog-/p/7670393.html
https://blog.csdn.net/weixin_50843918/article/details/130674960
https://blog.csdn.net/qq_32106647/article/details/79081278
https://blog.csdn.net/2302_77182979/article/details/134674756
https://blog.csdn.net/LJCC_c/article/details/111963923