mybatis properties属性
properties属性 可以为系统配置一些运行参数,这些配置可以在xml中完成,也可以在properties文件中编写。在Mybatis中提供了三种方式让我们使用properties
1. property 子元素
2. properties文件
3. 程序代码传递
property 子元素
我们可以在properties中配置数据源信息,然后在配置环境的时候引用properties中的属性。
<properties>
<property name="db.driver" value="com.mysql.jdbc.Driver" />
<property name="db.url" value="jdbc:mysql://127.0.0.1:3306/ssm" />
<property name="db.username" value="root" />
<property name="db.password" value="root" />
</properties>
配置数据源时候引用properties中的值。
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</dataSource>
这种方式适用于属性参数不多的情况,当属性较多时建议使用properties文件。
properties文件
首先我们创建一个file,后缀名为.properties ,放到classpath路径下。
#注释
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/cy44_tx?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
mysql.username=root
mysql.password=root
在properties中的注释以#开头,其中 = 前面的为键,后面为值。
将mybatis中的properties元素中的resource属性赋值为jdbc.properties文件的路径,在数据源配置时,同property模式一样,以${ }引用键值即可。
<properties resource="jdbc.properties"/>
<!-- 注释中的代码和上一行代码效果一样 -->
<!-- <properties>
<property name="db.driver" value="com.mysql.jdbc.Driver" />
<property name="db.url" value="jdbc:mysql://127.0.0.1:3306/ssm" />
<property name="db.username" value="root" />
<property name="db.password" value="root" />
</properties> -->
也可以写成这样
<properties resource="jdbc.properties">
<property name="db.driver" value="com.mysql.jdbc.Driver" />
<property name="db.url" value="jdbc:mysql://127.0.0.1:3306/ssm" />
<property name="db.username" value="root" />
<property name="db.password" value="root" />
</properties>
但是property子元素已经无效,因为properties文件方式优先级高于property子元素方式。
在真实开发时,开发人员无法获取真实的数据库信息,只有被加密过的数据库信息,通过给定的解密方法进行使用,这时我们要在创建SqlSessionFactroy对象之前将数据库信息解密并重置到配置文件中。
首先,我们先模拟一个解密方法
public class CodeUtils {
public static String decode(String code){
System.out.println("模拟解密过程"+ code);
return code;
}
}
给出将要重置到配置文件的properties
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.ibatis.io.Resources;
public class SetProperties {
public static Properties setJdbcProperties() throws IOException{
InputStream in = Resources.getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(in);
String username = properties.getProperty("mysql.username");
String password = properties.getProperty("mysql.password");
properties.put("mysql.username",CodeUtils.decode(username));
properties.put("mysql.password",CodeUtils.decode(password));
return properties;
}
}
这个阶段主要分为获取jdbc.properties文件中加密的字段,解密后放到新的properties文件中。
然后通过SqlSessionFactoryBuilder类中的builder方法重置到jdbc.properties中同时创建我们的SqlSessionFactory对象。
这一步只需要将我们的properties文件作文参数放到以前的SqlSessionFactoryUtils类中的getSqlSessionFactory方法里面的build方法中即可。
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,SetProperties.setJdbcProperties());