[MyBatis]--(2)总配置文件--(2)properties元素

声明:

Author:赵志乾

Date:2018-6-23

Declaration:All Right Reserved!!!


背景知识:

1、接入信息

     MyBatis作为一个成熟的ORM框架,其通过对JDBC规范中的那套API进行了一定程度的封装,来减轻开发人员在开发过程中的负担。但封装仅仅是对开发人员而言的,JDBC实际所需要的信息并不会减少。比如,JDBC需要使用驱动器来连接具体的数据库管理系统,而实现对数据库内容的访问则还需要提供相应的接入信息:如用户名、密码、url。

2、数据源

    资源这一概念在JavaEE规范中的定义很宽泛,其本身为一个对象,主要用于提供到受访者的链接。数据源就是其中的一种,其用于提供到数据库管理系统的链接,全称为dataSource。如接入信息中所述,链接到具体的数据库管理系统,需要的信息主要有4条:所使用的驱动器、访问url、用户名和密码。而作为应用代码中同数据库管理系统进行对接的抽象资源对象dataSource,自然也需要这4条信息。

3、信息配置形式

    数据源需要的信息可以直接配置到数据源对象。但框架实现中,为了提供更灵活的配置方式,将这些信息作为属性资源单独提出来进行配置,而让数据源对象通过间接引用来获取所需信息,从而使其不感知信息的具体配置方式。


properties元素

1、来源

    正如“背景知识”中的信息配置形式所述,数据源所需的信息被剥离出数据源对象,进行单独配置。于是便出现了一个properties元素,专门用于存放这些信息。该元素作为一个xml标签,其起到了对数据源配置信息的使用方和提供方的隔离。即使用方会使用properties元素提供的配置信息,但这些配置信息的获取方式完全由properties元素自身决定。也因此,该元素提供了3种方式来配置数据源链接所需的必要信息。这3种方式分别为:property子元素、properties文件、方法参数传递。

2、使用property子元素配置

    4条必要的配置信息对应到4条平级的property子元素。property子元素通过属性name和value来提供一个key-value对的配置。具体方式如下:

<properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</properties>   

注:这种配置方式非常简单,也很清晰。但缺点就是:一次配置仅能供一个配置文件使用。无法做到共享

3、使用properties文件配置

    properties子元素的缺点可以用properties文件配置方式进行弥补。因为其将配置信息提取到一个单独的properties文件中,可以很方便的供多个配置文件共享。之后在properties元素的resourse属性中引用properties文件即可。如下,在properties文件中定义如下键值对,并将文件命名为jdbc.properties。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456

   而properties元素则使用resource属性进行引用:

<properties resource="jdbc.properties"/>

4、使用程序参数传递配置

    前两种配置中,使用的都是明文。而在真实的应用中,处于安全的考虑,通常用户名和密码会使用密文。这会导致从配置文件中获取的信息无法直接用于连接数据库管理系统。为此,需要在应用代码中获取密文后,对其进行解密,然后用解出的明文完成数据库的链接。其实,这算不上是一种配置方式,顶多是对前两种配置方式的一个安全扩展。

5、优先级问题

    尽管我们不提倡在应用中混合使用上述的配置方式,但实际出现混合配置场景时,要能够清楚那种配置有效。也就是说出现多种配置方式时,那种配置方式优先级最高。

     MyBatis在加载时按如下顺序进行:property子元素、properties文件、程序参数传递。而其优先级则是随加载顺序逐个升高。因为后加载的会覆盖先加载的元素。


邮箱:[email protected]

参考资料:《深入浅出MyBatis技术原理与实践》--杨开振


猜你喜欢

转载自blog.csdn.net/zhaoyaxuan001/article/details/80782604