• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

注意事项

  1. 属性名大小写敏感:MyBatis 对属性名是大小写敏感的,因此 driver 和 Driver 是不同的属性名。
  2. 确保 db.properties 文件路径正确:确保 db.properties 文件在类路径下,或者在 resource 目录中。
  3. 数据库驱动版本:根据数据库驱动的版本选择正确的驱动类名。

总结

通过将自定义的属性名改为 MyBatis 支持的标准属性名,可以解决 Unknown DataSource property 问题。在配置 MyBatis 时,务必遵循 MyBatis 的规范,避免使用自定义属性名,以确保配置的正确性和兼容性。

希望本文能帮助大家更好地理解和解决 MyBatis 配置中的常见问题。如果你有任何疑问或建议,欢迎在评论区留言交流!


参考资料

  • MyBatis 官方文档
  • MySQL JDBC 驱动文档

作者:[ITCQ1024]
发布时间:[2024-12-15]
版权声明:本文为原创文章,转载请注明出处。

posted on 2024-12-15 19:43  周政然  阅读(261)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3