MyBatis配置文件――properties属性
Posted HelloWhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis配置文件――properties属性相关的知识,希望对你有一定的参考价值。
MyBatis配置文件中有很多配置项,这些配置项分别代表什么,有什么作用,需要理一下了。先通过下面这个例子来看都有哪些配置项
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!-- mybatis的基本配置文件:主要配置基本的上下文参数和运行环境 --> 6 <configuration> 7 <!--配置--> 8 <properties></properties> 9 <!--设置 --> 10 <settings></settings> 11 <!--类型命名 --> 12 <!--别名:pojo对象的别名 --> 13 <typeAliases> 14 <typeAlias alias="user" type="com.daily.pojo.User"></typeAlias> 15 <typeAlias alias="product" type="com.daily.pojo.Product"></typeAlias> 16 </typeAliases> 17 <!--类型处理器 --> 18 <typeHandlers></typeHandlers> 19 <!--对象工厂 --> 20 <objectFactory></objectFactory> 21 <!--插件 --> 22 <plugins></plugins> 23 <!-- 环境模式:development开发模式 work工作模式 --> 24 <environments default="development"> 25 <!--环境变量 --> 26 <environment id="development"> 27 <!--事务管理器 --> 28 <transactionManager type="JDBC" /> 29 <!--数据源 --> 30 <dataSource type="POOLED"> 31 <property name="driver" value="${db.driver}" /> 32 <property name="url" value="${db.url}" /> 33 <property name="username" value="${db.username}" /> 34 <property name="password" value="${db.pwd}" /> 35 </dataSource> 36 </environment> 37 </environments> 38 <!--数据库厂商标示 --> 39 <databaseIdProvider></databaseIdProvider> 40 <!-- 映射器 --> 41 <mappers> 42 <mapper resource="com/daily/mapper/UserMapper.xml" /> 43 <mapper resource="com/daily/mapper/ProductMapper.xml" /> 44 </mappers> 45 </configuration>
以上就是所有的配置项,需要注意的是配置项的顺序不能颠倒,如果颠倒了它们的顺序,在MyBatis的自启动阶段会发生异常,导致程序无法运行。我会一个一个配置地做一下分析和记录,为了避免文章太长导致日后复习或别人阅读时产生疲劳,我决定一个配置项分一篇的方式进行记录。今天先分析一下第一个配置项properties。
首先properties的使用方式有三种:
1??property子元素:就是在properties属性中增加子属性property,从而设置一些配置的key-value;
2??properties文件:就是直接使用properties引入外部配置文件,相当于将子属性抽取成一个独立的外部文件引入;
3??程序代码传递参数:就是通过代码的方式设置该配置相关的信息,如数据库配置文件中的用户名和密码一般是密文,但是连接数据库时需要对配置进行解密,此时就只能通过程序代码的方式配置了;
下面以数据库配置为例,来实现这三种不同的配置方式:
??注意:因为是单独介绍,所以这里显示properties的配置,不显示其他配置项
一、property子元素
1 <properties> 2 <property name="db.driver" value="org.postgresql.Driver"></property> 3 <property name="db.url" value="jdbc:postgresql://localhost:5433/postgres"></property> 4 <property name="db.username" value="postgres"></property> 5 <property name="db.pwd" value="postgres"></property> 6 </properties>
这种配置方式的缺点是,如果配置项很多,那么就会让配置文件显得很庞大,为了解决这个缺点,我们可以使用下面的配置方式??
二、properties文件
首先将上述配置中的所有property属性提取到一个叫做db.properties的配置文件中,如下图所示:
1 #postgresql 2 db.driver=org.postgresql.Driver 3 db.url=jdbc:postgresql://localhost:5433/postgres 4 db.username=cG9zdGdyZXM= 5 db.pwd=aHljMTIz
然后将该文件引入MyBatis配置文件
1 <properties resource="db.properties" />
这样就相当于将db.properties中的所有配置都加载到MyBatis的配置文件中了,但是这种使用方式也存在它的缺点,当外部配置文件中的值需要加密时,如连接数据库的用户名和密码,无法在配置文件中进行解密,所以只能通过程序代码传递的方式,就是要介绍的第三种,如下??
三、程序代码方式传递参数
其实这种方式一般会和第二种配合使用,作用对特殊配置进行覆盖或重写,以上面的db.properties为例,在使用到数据库配置信息时对配置中的用户名和密码进行解密。这里举个MyBatis中获取SqlSessionFactory的例子:
1 public static SqlSessionFactory getSqlSessionFactoryByXml() { 2 synchronized (Lock) { 3 if (null != sqlSessionFactory) { 4 return sqlSessionFactory; 5 } 6 String resource = "mybatis-config.xml"; 7 InputStream inputStream; 8 InputStream is = null; 9 try { 10 // 加载数据库配置文件 11 is = Resources.getResourceAsStream("db.properties"); 12 Properties properties = new Properties(); 13 properties.load(is); 14 15 // 获取加密信息 16 String userName = properties.getProperty("db.username"); 17 String pwd = properties.getProperty("db.pwd"); 18 19 // 解密用户名和密码,并重置属性 20 properties.setProperty("db.username", CyperTool.decodeByBase64(userName)); 21 properties.setProperty("db.pwd", CyperTool.decodeByBase64(pwd)); 22 // 读取mybatis配置文件 23 inputStream = Resources.getResourceAsStream(resource); 24 // 通过SqlSessionFactoryBuilder类的builder方法进行构建,并使用程序传递的方式覆盖原有属性 25 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 return null; 29 } 30 return sqlSessionFactory; 31 } 32 }
上面的代码中:
1??11~13行是加载数据库配置文件
2??16、17行是获取加密配置
3??20、21行是解密数据并重新设置到配置文件中
4??25行通过传递配置文件完成重写
以上就是properties属性的所有内容,一般来说如果不加密,会使用第二种方式,这样降低维护的耦合性,如果有加密信息,则使用第三种。
!-- p.p1>
以上是关于MyBatis配置文件――properties属性的主要内容,如果未能解决你的问题,请参考以下文章