D:\javajdk\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\kaifagongjv\IntelliJ IDEA 2024.2\lib\idea_rt.jar=53026:D:\kaifagongjv\IntelliJ IDEA 2024.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\kaifagongjv\IntelliJ IDEA 2024.2\lib\idea_rt.jar;D:\kaifagongjv\IntelliJ IDEA 2024.2\plugins\junit\lib\junit5-rt.jar;D:\kaifagongjv\IntelliJ IDEA 2024.2\plugins\junit\lib\junit-rt.jar;D:\soft_tools\Javaweb\MyBatis\MyBatis_demo2\target\test-classes;D:\soft_tools\Javaweb\MyBatis\MyBatis_demo2\target\classes;D:\Maven\maven-repository\org\mybatis\mybatis\3.5.13\mybatis-3.5.13.jar;D:\Maven\maven-repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\Maven\maven-repository\junit\junit\4.13.1\junit-4.13.1.jar;D:\Maven\maven-repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\Maven\maven-repository\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar;D:\Maven\maven-repository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 MyBatisTest org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLException: Access denied for user '${jdbc.root}'@'localhost' (using password: YES) ### The error may exist in mappers/UserMapper.xml ### The error may involve org.mybatis.mapper.UserMapper.selectUser ### The error occurred while executing a query ### Cause: java.sql.SQLException: Access denied for user '${jdbc.root}'@'localhost' (using password: YES) at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:156) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) at org.apache.ibatis.
时间: 2025-06-23 10:22:43 浏览: 7
<think>嗯,用户遇到了MyBatis的PersistenceException,具体是数据库访问被拒绝的问题。首先,我需要回忆一下常见的导致这个错误的原因。根据引用中的信息,用户使用的数据库是MySQL,用户名为root,密码可能有问题。可能的原因包括密码错误、用户权限未正确配置,或者连接参数有误。
首先,应该检查密码是否正确。用户提供的配置文件中密码是000730,但有时候可能会有拼写错误或者空格。另外,MySQL的用户权限设置是否正确?即使用户名和密码正确,如果root用户没有被授权从localhost访问,也会导致这个问题。需要确认MySQL中root用户的权限是否允许从本地连接。
接下来,查看连接URL是否正确。引用中的URL是jdbc:mysql://127.0.0.1:3306/security,这里可能需要确认数据库名是否正确,以及端口是否是3306。另外,连接参数中的useUnicode等是否正确转义,比如在YAML文件中是否应该使用&而不是&?因为YAML对特殊字符的处理可能不同,正确的分隔符应该是&,而用户配置中写成了&,这可能是问题所在。
另外,用户可能没有正确安装MySQL驱动。检查pom.xml或build.gradle中是否有MySQL Connector/J的依赖,版本是否兼容当前MySQL服务器版本。如果驱动类名错误或者版本不匹配,也可能导致连接问题。
还有,MySQL服务是否正在运行?有时候服务未启动或者端口被占用也会导致连接被拒绝。需要确认MySQL服务状态,以及防火墙是否允许3306端口的连接。
可能的解决步骤包括:1. 验证用户名和密码是否正确;2. 检查MySQL中的用户权限;3. 修正连接URL中的参数,特别是特殊字符的转义;4. 确认MySQL驱动依赖正确;5. 检查MySQL服务状态和网络配置。
用户可能需要登录MySQL,执行命令查看权限,例如SELECT user, host FROM mysql.user; 和 SHOW GRANTS FOR 'root'@'localhost';。如果权限不足,使用GRANT命令授权。同时,确保密码正确,可能需要重置密码。此外,检查YAML文件中的URL参数是否正确,替换&为&,因为YAML中的&需要正确转义,但用户当前使用的是HTML实体,这在YAML中可能不被正确解析。
另外,考虑测试连接,使用其他工具如MySQL Workbench或命令行连接,以确认问题是否在应用配置。如果其他工具也无法连接,说明问题在MySQL配置,否则可能是应用配置问题。
总结,需要逐步排除各个可能的原因,从最基础的密码、权限到配置文件的语法和驱动依赖,确保每一步都正确无误。</think>### 解决MyBatis中数据库访问权限导致的PersistenceException问题
#### 1. 验证数据库连接配置
检查`application.yml`中的连接参数是否符合以下要求:
- **用户名/密码**:确保`username: root`和`password: 000730`与MySQL实际配置一致[^3]。
- **URL格式修正**:将URL中的`&`替换为`&`(YAML中`&`需直接使用或转义为`&amp;`):
```yaml
url: jdbc:mysql://127.0.0.1:3306/security?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
```
- **驱动类名**:确认`driver-class-name: com.mysql.cj.jdbc.Driver`与MySQL Connector/J版本匹配(8.x版本适用)[^3]。
#### 2. 检查MySQL用户权限
通过MySQL命令行验证用户权限:
```sql
-- 查看用户权限
SHOW GRANTS FOR 'root'@'localhost';
-- 若权限不足,授权所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```
#### 3. 测试独立数据库连接
使用简单Java代码或工具(如MySQL Workbench)验证连接:
```java
public class ConnectionTest {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/security";
String user = "root";
String password = "000730";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
若失败,需排查MySQL服务状态或网络配置。
#### 4. 确认MySQL服务状态
- **启动服务**:
```bash
# Linux
sudo systemctl start mysql
# Windows
net start mysql
```
- **端口占用检查**:
```bash
netstat -ano | findstr :3306
```
#### 5. 验证依赖配置
在Maven项目中,确保`pom.xml`包含MySQL驱动依赖:
```xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
```
#### 6. 密码重置(可选)
若密码错误,通过以下步骤重置:
```sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
```
---
###
阅读全文
相关推荐















