MyBatis 配置中的常见问题:解决 `Unknown DataSource property` 错误
MyBatis 配置中的常见问题:解决 Unknown DataSource property 错误
引言
在使用 MyBatis 进行数据库操作时,配置文件的正确性至关重要。然而,在实际开发中,我们可能会遇到一些配置问题,比如 Unknown DataSource property 错误。本文将详细分析这一问题的原因,并结合实际案例,帮助大家避免类似的配置错误。
问题背景
在开发过程中,我遇到了一个 MyBatis 配置问题。运行项目时,控制台抛出了以下错误信息:
org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: druidURL
从错误信息可以看出,MyBatis 无法识别 druidURL 这个属性,导致构建 SqlSession 失败。
问题分析
1. 错误原因
MyBatis 的 dataSource 配置中,UnpooledDataSourceFactory 或 PooledDataSourceFactory 只支持特定的属性名,例如:
driver:数据库驱动类名。url:数据库连接 URL。username:数据库用户名。password:数据库密码。
如果使用了自定义的属性名(如 druidDriver、druidURL、druidUserName、druidPassWord),MyBatis 将无法识别这些属性,从而抛出 Unknown DataSource property 异常。
2. 我的疑惑
在排查问题时,我一度认为 db.properties 文件中的键名必须与 mybatis-config.xml 中的 <property> 标签的 name 属性一致。然而,经过深入分析,我发现:
${}占位符中的内容:必须与db.properties文件中的键名一致。<property>标签的name属性:必须使用 MyBatis 支持的标准属性名(如driver、url、username、password),而不是自定义属性名。
解决方案
1. 修改 mybatis-config.xml
将 dataSource 配置中的自定义属性名改为 MyBatis 支持的标准属性名:
<dataSource type="POOLED">
<property name="driver" value="${druidDriver}"/>
<property name="url" value="${druidURL}"/>
<property name="username" value="${druidUserName}"/>
<property name="password" value="${druidPassWord}"/>
</dataSource>
2. 修改 db.properties
确保 db.properties 文件中的键名与 mybatis-config.xml 中的占位符一致:
druidDriver=com.mysql.jdbc.Driver
druidURL=jdbc:mysql://127.0.0.1:3306/db_mybatis?useSSL=false
druidUserName=root
druidPassWord=928151
3. 检查数据库驱动和连接 URL
- 数据库驱动类名:确保
druidDriver的值是正确的数据库驱动类名。例如,MySQL 的驱动类名可以是com.mysql.cj.jdbc.Driver(较新的版本)或com.mysql.jdbc.Driver(较旧的版本)。 - 数据库连接 URL:确保
druidURL的值是正确的数据库连接 URL。例如,MySQL 的 URL 格式为jdbc:mysql://<host>:<port>/<database>?useSSL=false。
示例代码
以下是完整的配置示例:
mybatis-config.xml
<?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="db.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.itcq.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${druidDriver}"/>
<property name="url" value="${druidURL}"/>
<property name="username" value="${druidUserName}"/>
<property name="password" value="${druidPassWord}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.itcq.dao"/>
</mappers>
</configuration>
db.properties
druidDriver=com.mysql.cj.jdbc.Driver
druidURL=jdbc:mysql://127.0.0.1:3306/db_mybatis?useSSL=false
druidUserName=root
druidPassWord=928151
注意事项
- 属性名大小写敏感:MyBatis 对属性名是大小写敏感的,因此
driver和Driver是不同的属性名。 - 确保
db.properties文件路径正确:确保db.properties文件在类路径下,或者在resource目录中。 - 数据库驱动版本:根据数据库驱动的版本选择正确的驱动类名。
总结
通过将自定义的属性名改为 MyBatis 支持的标准属性名,可以解决 Unknown DataSource property 问题。在配置 MyBatis 时,务必遵循 MyBatis 的规范,避免使用自定义属性名,以确保配置的正确性和兼容性。
希望本文能帮助大家更好地理解和解决 MyBatis 配置中的常见问题。如果你有任何疑问或建议,欢迎在评论区留言交流!
参考资料
作者:[ITCQ1024]
发布时间:[2024-12-15]
版权声明:本文为原创文章,转载请注明出处。
浙公网安备 33010602011771号