Mybatis mybatis-config.xml 引入外部配置properties
程序特点:
- 纯Java-Mybatis应用(.jar),使用批处理(.bat)启动。
目的目标:
- 为了程序的便利性,将
db-properties
提取至与.jar
文件平级的目录下,这样对于不同的使用场景(连接不同DB时),无需修改.jar
文中的任何内容,只需要修改db-properties
中的配置信息即可。
实现方式:
- 1、 将
db-properties
提取至与.jar
文件平级的目录下。db-properties
内容:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hr?serverTimezone=GMT
jdbc.username=root
jdbc.password=root
- 2、
mybatis-config.xml
中加上以下内容。
<!-- ... -->
<!-- 引入与jar包同级的配置文件 -->
<properties url="file:./db.properties" />
<!-- 数据库环境 -->
<environments default="prod">
<environment id="prod">
<transactionManager type="JDBC"/>
<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>
<!-- ... -->
说明:
url="file:./db.properties"
程序会从当前
.jar
文件的同级目录中引入db.properties
文件。
file:
必须写。在windows环境下的一些特定的场合可以省略(不推荐)。
<properties/>
有两个属性:resource
(相对路径) 和url
(绝对路径) 。例:
<properties resource="config/db.properties"/>
<properties url="file:///D:/projects//config//db.properties"/>
小提示
可在 project 根目录下创建一个template
文件夹,存放类似db-properties
的文件,为使用者提供标准的配置模板,具体配置的值由使用者自行配置。
其他实现方式:
当然,Mybatis还支持其他方式引入。以下引入官方说明:可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值。例如:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// ... 或者 ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
Mybatis加载顺序:
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource
/ url
属性中指定的配置文件次之,最低优先级的则是 properties
元素中指定的属性。
从 MyBatis 3.4.2 开始,你可以为占位符指定一个默认值。例如:
<dataSource type="POOLED">
<!-- ... -->
<!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
<property name="username" value="${username:ut_user}"/>
</dataSource>
这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性。例如:
<properties resource="org/mybatis/example/config.properties">
<!-- ... -->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
</properties>
提示 如果你在属性名中使用了 “:” 字符(如:db:username),或者在 SQL 映射中使用了 OGNL 表达式的三元运算符(如: ${tableName != null ? tableName : ‘global_constants’}),就需要设置特定的属性来修改分隔属性名和默认值的字符。例如:
<properties resource="org/mybatis/example/config.properties">
<!-- ... -->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默认值的分隔符 -->
</properties>
<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${db:username?:ut_user}"/>
</dataSource>
以上。