在Mybatis中有很多属性是需要动态配置的,这时候我们就用到了properties文件,那么在Mybatis中可以使用哪些方式可以配置properties属性呢?
方式一:直接配置在mybatis-config.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>
<property name="datasource.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="datasource.url" value="jdbc:mysql://localhost:3306/spring"/>
<property name="datasource.username" value="root"/>
<property name="datasource.password" value="123456"/>
</properties>
</configuration>
像这样,我们可以直接在mybatis的核心配置文件mybatis-config.xml
中配置所需的properties属性
使用时直接${name}
即可
<!--尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境-->
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${datasource.driver}"/>
<property name="url" value="${datasource.url}"/>
<!--可以指定一个默认值-->
<property name="username" value="${datasource.username:?root}"/>
<property name="password" value="${datasource.password:?123456}"/>
</dataSource>
</environment>
</environments>
方式二: 配置到外部的properties文件中,然后在mybatis-config.xml文件中引入
datasource.properties文件:
datasource.url=jdbc:mysql://localhost:3306/spring
datasource.driver=com.mysql.cj.jdbc.Driver
datasource.username=root
datasource.password=123456
使用时需要在mybatis-config.xml
文件中引入外部的datasource.properties
文件
<?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 resource="config/datasource.properties"/>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${datasource.driver}"/>
<property name="url" value="${datasource.url}"/>
<property name="username" value="${datasource.username}"/>
<property name="password" value="${datasource.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
方式三:在创建SqlSessionFactoryBuilder时传入
SqlSessionFactoryBuilder的build
方法:
public SqlSessionFactory build(InputStream inputStream) {
return build(inputStream, null, null);
}
public SqlSessionFactory build(InputStream inputStream, String environment) {
return build(inputStream, environment, null);
}
public SqlSessionFactory build(InputStream inputStream, Properties properties) {
return build(inputStream, null, properties);
}
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
// ...省略具体实现
}
由此可知,我们可以在调用SqlSessionFactoryBuilder
对象的build
方法时传入一个Properties
对象。如下:
@BeforeAll
static void setup() throws IOException {
InputStream resource = Resources.getResourceAsStream("config/mybatis-config.xml");
Properties properties = new Properties();
properties.put("datasource.url","jdbc:mysql://localhost:3306/spring");
properties.put("datasource.driver","com.mysql.cj.jdbc.Driver");
properties.put("datasource.username","root");
properties.put("datasource.password","123456");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource, properties);
sqlSession = sqlSessionFactory.openSession();
}
其它方式:
也可以使用Java代码读取外部的properties文件返回一个properties对象,然后像方法三中的使用方法使用。