Mybatis的属性(properties)

使用外部属性 

使用内部子元素属性

加载属性的顺序

属性默认值


先来官网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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/study?userSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

现在可以使用属性properties进行动态配置

先来一个属性文件

driver=com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/study?userSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username = root
password = password

接着就可以在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 resource="db.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/lingaolu/dao/DeptMapper.xml"/>
    </mappers>
</configuration>

使用内部子元素属性

当然我们的属性值也可以定义在内部,如

<?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">
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </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/lingaolu/dao/DeptMapper.xml"/>
    </mappers>
</configuration>

加载属性的顺序

如果一个属性在不只一个地方进行了配置,那么,MyBatis的加载顺序是怎么样的呢

我们就用用户名来举例,在3个地方都定义了用户名这个属性,正确的用户名是root,然后给值都是错的值,看最后报错的用户名的值是多少

db.properties文件使用root1

内部属性给值root2,直接赋值root3

单元测试一下

报错显示的是root3,说明最后使用的是直接赋值的

那么属性文件里的属性,和内部子元素属性的加载顺序如何呢,我们修改一下代码,不直接赋值,而是使用属性赋值

单元测试一下

报错显示的是root3,说明是先加载的是内部子元素属性

所以如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:

  • 首先读取在 properties 元素体内指定的属性
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。

也就是官网所说明的

属性默认值

我们启用了属性默认值,并且内部子元素属性也不配置了用户名username

但是我们的属性文件db.properties还是配置了用户名username,先测试一下

单元测试一下

使用的还是属性文件里面的值,为什么没有使用默认的值,因为我们的默认值是指如果没有配置,才使用的

所以我们就得把属性文件里的username注释掉

现在username没有任何地方配置了,单元测试一下

成功了,说明已经使用了默认值root

猜你喜欢

转载自blog.csdn.net/lgl782519197/article/details/109062243