Mybatis入门-config文件标签属性(properties)加载顺序详解(三)
程序员文章站
2022-05-23 23:21:56
...
1.首先我们改造下SqlMappConfig.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="JDBC.properites"/>
<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/msb/pojo/DeptMapper.xml"/>
</mappers>
</configuration>
resourcss目录下JDBC.properites文件内容,如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.220.130:3306/test_project?useUnicode=true&characterEncoding=UTF-8
username=root
password=qwert123
运行测试结果正确:
2.再次改造SqlMappConfig.xml,加载JDBC.properites文件的同时,设置property属性值,这里test_project1的库实际是不存在的,我们来看下这里的url加载的是config下的还是
JDBC.properites文件的
<properties resource="JDBC.properites">
<property name="url" value="jdbc:mysql://192.168.220.130:3306/test_project1?useUnicode=true&
characterEncoding=UTF-8"/>
</properties>
运行测试结果正确:
3.修改测试类中init方法,如下:
@Before
public void factoryInit() throws IOException{
initLogRecord.initLog();
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(resource);
}
这里builder.build(Reader rd)方法有个重载的方法为builder.build(Reader rd,String eviroment),不指定的话默认default的值,也可指定eviroment id值
运行测试结果正确:
这里就解释了Mybatis帮助文档上所说的:
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
首先读取在 properties 元素体内指定的属性。
然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆 盖之前读取过的同名属性。
最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。