文章目录
前言
使用Mybatis时需要注意配置文件的特殊写法,否则将出现莫名的错误,下面我介绍两个错误与Mybatis配置文件书写不当有关
场景
本文中使用了工作环境如下:
- 工具:IntelliJ IDEA 2018.3.5
- JDK:1.8
- Mybatis相关jar包:mybatis-3.5.9.jar
- 连接数据库:MariaDB
问题1:Access denied for user ‘root’@‘localhost’ (using password: YES)
在做了简单工程后,填写了相关的配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置文件的根元素 -->
<configuration>
<properties resource="com/company/config.properties">
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="$(password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/company/Blog.xml"></mapper>
</mappers>
</configuration>
填写了相关的config.properties 文件如下:
driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://127.0.0.1:3306/demo
username=root
password=123456
在编译时出现如下错误:
Caused by: java.sql.SQLInvalidAuthorizationSpecException: (conn=22) Access denied for user 'root'@'localhost' (using password: YES)
Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding'
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:66)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:189)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.authenticationHandler(AbstractConnectProtocol.java:769)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:555)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1389)
... 28 more
核查了半天,最后才发现时配置文件中括号引起的问题
原本应该写为
<property name="password" value="${password}"/>
不料一不小心写成了
<property name="password" value="$(password}"/>
由于password 未有效配对,造成密码未曾识别,引发了错误。
问题2:Access denied for user ‘${username)’@‘localhost’ (using password: YES)
在做了简单工程后,填写了相关的配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置文件的根元素 -->
<configuration>
<properties resource="com/company/config.properties">
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username)"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/company/Blog.xml"></mapper>
</mappers>
</configuration>
填写了相关的config.properties 文件如下:
driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://127.0.0.1:3306/demo
username=root
password=123456
在编译时出现如下错误:
Caused by: java.sql.SQLInvalidAuthorizationSpecException: (conn=24) Access denied for user '${username)'@'localhost' (using password: YES)
Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding'
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:66)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:189)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.authenticationHandler(AbstractConnectProtocol.java:769)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:555)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1389)
... 28 more
原本应该写为
<property name="username" value="${username}"/>
不料一不小心写成了
<property name="username" value="${username)"/>
由于username未有效配对,造成用户名称未曾识别,引发了错误。
总结
本文简要描述了使用配置文件不当造成的Mybatis应用问题,希望能够帮助应用mybatis的小伙伴