实战:MyBatis 中 db.properties 的正确配置与最佳实践

在 MyBatis 框架中,数据库配置的管理方式直接影响项目的可维护性和灵活性。本文将通过具体代码示例,详细讲解如何使用 db.properties 实现数据库配置的解耦管理,并对比传统硬编码方式的优劣。

一、两种配置方式的直观对比

传统硬编码方式

在 mybatis-config.xml 中直接写入数据库连接信息:

复制代码
<dataSource type="POOLED">
    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/数据库名称?serverTimezone=GMT"/>
    <property name="username" value="用户名"/>
    <property name="password" value="密码"/>
</dataSource>

这种方式的问题显而易见:数据库信息变更时必须修改核心配置文件,且敏感信息直接暴露在配置中。

使用 db.properties 管理配置

1、创建 db.properties 文件

在项目的 resources 目录下创建该文件,专门存放数据库连接参数:

复制代码
# db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名称?serverTimezone=GMT
jdbc.username=用户名
jdbc.password=密码
2、在 mybatis-config.xml 中引用

通过 <properties> 标签加载配置文件,再用 ${key} 语法引用参数:

复制代码
<?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>
    <!-- 加载 db.properties 文件 -->
    <properties resource="db.properties"/>
    
    <!-- 开启驼峰映射:数据库下划线字段自动映射为Java驼峰属性 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!-- 开发环境配置 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <!-- 使用 ${} 语法引用外部配置 -->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 注册映射文件 -->
    <!-- 这里必须是反斜杠 -->
    <mappers>
        <mapper resource="com/apesource/mapper/StudentMapper.xml"></mapper>
    </mappers>
</configuration>

二、配置解析与优势说明

1、配置加载流程

这种机制实现了配置与代码的完全分离,数据库参数的变更不会影响核心配置文件。

  1. MyBatis 启动时首先读取 <properties resource="db.properties"/> 配置
  2. 将 db.properties 中的键值对加载到内存中
  3. 在 <dataSource> 配置中通过 ${key} 格式引用对应的值

2、多环境配置技巧

实际开发中,我们通常需要区分开发、测试和生产环境,可通过以下方式实现:

复制代码
# 创建多个环境的配置文件
db_dev.properties  # 开发环境
db_test.properties # 测试环境
db_prod.properties # 生产环境

切换环境时,只需修改加载的配置文件名称:

复制代码
<!-- 切换到生产环境 -->
<properties resource="db_prod.properties"/>

3、与驼峰映射的协同作用

配置中同时开启了驼峰映射:

复制代码
<setting name="mapUnderscoreToCamelCase" value="true"/>

结合 db.properties 的使用,实现了双重优化:

  • 数据库连接参数的集中管理
  • 数据库字段(如 user_name)与 Java 属性(如 userName)的自动映射

两者配合使用,极大提升了开发效率和代码整洁度。

三、最佳实践建议

  1. 敏感信息处理:生产环境中,建议对 db.properties 中的密码进行加密处理
  2. 版本控制忽略:在 .gitignore 中添加 db.properties,避免敏感信息提交到代码仓库
  3. 规范命名:保持 properties 中的键名与 MyBatis 引用的一致性,建议使用 jdbc. 作为前缀
  4. 连接参数优化 :在 jdbc.url 中添加必要的参数,如字符编码 characterEncoding=utf8

通过这种配置方式,我们的项目将获得更好的可维护性、更高的安全性和更灵活的环境切换能力。尤其是在团队协作和多环境部署的场景下,db.properties 的优势会体现得淋漓尽致。

相关推荐
没有bug.的程序员4 小时前
分布式架构未来趋势:从云原生到智能边缘的演进之路
java·分布式·微服务·云原生·架构·分布式系统
专业软件系统开发6 小时前
药品说明书查询系统源码 本地数据库 PHP版本
数据库·查询系统源码·说明书查询源码
毕业设计制作和分享6 小时前
springboot150基于springboot的贸易行业crm系统
java·vue.js·spring boot·后端·毕业设计·mybatis
冉冰学姐10 小时前
SSM足球爱好者服务平台i387z(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·足球爱好者服务平台
大飞记Python10 小时前
部门管理|“编辑部门”功能实现(Django5零基础Web平台)
前端·数据库·python·django
小梁努力敲代码11 小时前
java数据结构--List的介绍
java·开发语言·数据结构
清风66666612 小时前
基于单片机的智能收银机模拟系统设计
数据库·单片机·毕业设计·nosql·课程设计
摸鱼的老谭12 小时前
构建Agent该选Python还是Java ?
java·python·agent
资深低代码开发平台专家12 小时前
PostgreSQL 18 发布
数据库·postgresql
lang2015092812 小时前
Spring Boot 官方文档精解:构建与依赖管理
java·spring boot·后端