MyBatis配置文件详谈——properties

本文深入解析MyBatis配置文件的结构与元素,包括properties、settings、typeAliases等关键部分,探讨如何通过不同方式设置数据库连接参数,以及这些配置项在实际应用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis配置文件并不复杂,他所有的元素如下:

<?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></properties> <!-- 属性 -->
    <settings></settings> <!-- 设置 -->
    <typeAliases></typeAliases> <!-- 类型命名 -->
    <typeHandlers></typeHandlers> <!-- 类型处理器 -->
    <objectFactory type=""></objectFactory> <!-- 对象工厂 -->
    <plugins></plugins> <!-- 插件 -->
    <environments default=""> <!-- 配置环境 -->
        <environment id=""> <!-- 环境变量 -->
            <transactionManager type=""></transactionManager> <!-- 事务管理器 -->
            <dataSource type=""></dataSource> <!-- 数据源 -->
        </environment>
    </environments> 
    <databaseIdProvider type=""></databaseIdProvider> <!-- 数据库厂商标识 -->
    <mappers></mappers> <!-- 映射器 -->
</configuration>

properties属性

properties属性可以给系统配置一些运行参数,可以放在XML文件或者properties文件中,而不是放在Java编码中,这样的好处就在于方便参数修改,而不会引起代码的重新编译,一般来说,MyBaties提供了3种方式使用properties,分别是:

  • property子元素
  • properties文件
  • 程序代码传递

1)、property子元素

<?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>
        <property name="database.driver" value="com.mysql.jdbc.Driver"/>
        <property name="database.url" value="jdbc:mysql://localhost:3306/ssm"/>
        <property name="database.username" value="root"/>
        <property name="database.password" value="123456"/>
    </properties>
    <typeAliases><!-- 别名-->
        <typeAlias alias="role" type="pojo.Role"></typeAlias>
    </typeAliases>
    <!-- 数据库环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${database.driver}"></property>
                <property name="url" value="${database.url}"></property>
                <property name="username" value="${database.username}"></property>
                <property name="password" value="${database.password}"></property>
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件 -->
    <mappers>
        <mapper resource="mapper/RoleMapper.xml"></mapper>
    </mappers>
</configuration>

这里使用了元素properties下的子元素property定义,用字符串database.username定义数据库用户名,然后就可以在数据库定义中引入这个已经定义好的属性参数,如${database.username},这样就定义一次就可以到处引用了。

2)、使用properties文件
使用properties文件是比较普遍的方法,一方面这个文件十分简单,其逻辑就是键值对应,我们可以配置多个键值放在一个properties文件中,也可以把多个键值放到多个properties文件中。
我们创建一个jdbc.properties放到classpath路径下,代码如下:

database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/ssm
database.username=root
database.password=123456

在MyBaties中通过properties的属性resource来引入properties文件。

<properties resource="jdbc.properties"/>

这样之后也可以按${database.driver}的方法引入properties文件的属性参数到MyBatis配置文件中。

3)、使用程序传递方式传递参数
有时候不想让别人知道用户和密码,此时往往需要通过加密和解密操作。现在假设系统已经为其提供的一个CodeUtils.decode(str)进行解密,那么我们在创建SqlSessionFactory前,就需要把用户名和密码解密,然后把解密后的字符串重置到properties属性中,代码如下:

 	String resource="mybatis-config.xml";
    InputStream inputStream;
    InputStream in= Resources.getResourceAsStream("jdbc.properties");
    Properties props=new Properties();
    props.load(in);
    String username=props.getProperty("database.username");
    String password=props.getProperty("database.passwprd");
    //解密用户和密码,并在属性中重置
    props.put("database.username",CodeUtils.decode(username));
    props.put("database.password",CodeUtils.decode(password));
    inputStream=Readables.getResourceAsStream(resource);
    SqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream,props);

首先使用Resources对象读取了一个jdbc.properties配置文件,然后获取了它原来配置的用户和密码,进行解密并重置,最后使用SqlSessionFactoryBuilder的build方法,传递多个properties参数来完成。

总结:
我们讨论了MyBatis使用properties的3种方式,这三种方式是有优先级的,最优先的是使用程序传递的方式,其次是使用peoperties文件的方式,最后是使用property子元素的方式,MyBatis会根据优先级来覆盖原先配置的属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值