Mybatis配置文件(一):properties配置

mybatis中xml文件结构

	MyBatis 的 XML 配置文件包含了影响 MyBatis 行为甚深的设置和属性信息。 XML 文档的高层级结构如下:
  • configuration 配置
    • properties 属性
    • settings 设置
    • typeAliases 类型命名
    • typeHandlers 类型处理器
    • objectFactory 对象工厂
    • plugins 插件
    • environments 环境
      • environment 环境变量
        • transactionManager 事务管理器
        • dataSource 数据源
    • 映射器

下面是一个mybatis配置的简单示例:

 <?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">
  <!-- mybatis的基本配置文件:主要配置基本的上下文参数和运行环境 -->
  <configuration>
      <!--配置-->
      <properties></properties>
      <!--设置 -->
     <settings></settings>
     <!--类型命名 -->
     <!--别名:pojo对象的别名 -->
     <typeAliases>
         <typeAlias alias="user" type="com.pojo.User"></typeAlias>
         <typeAlias alias="enterprice" type="com.pojo.enterprice"></typeAlias>
     </typeAliases>
     <!--类型处理器 -->
     <typeHandlers></typeHandlers>
     <!--对象工厂 -->
     <objectFactory></objectFactory>
     <!--插件 -->
     <plugins></plugins>
     <!-- 环境模式:development开发模式 work工作模式 -->
     <environments default="development">
         <!--环境变量 -->
         <environment id="development">
             <!--事务管理器 -->
             <transactionManager type="JDBC" />
             <!--数据源 -->
             <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.pwd}" />
             </dataSource>
         </environment>
     </environments>
     <!--数据库厂商标示 -->
     <databaseIdProvider></databaseIdProvider>
     <!-- 映射器 -->
     <mappers>
         <mapper resource="com/mapper/UserMapper.xml" />
         <mapper resource="com/mapper/EnterpricetMapper.xml" />
     </mappers>
 </configuration>

值得注意的是配置顺序是不可颠倒的,一旦发生了颠倒,在mybaties启动时就会发生异常,导致程序无法运行。

首先我们这里介绍properties配置,properties配置有三种方式:

  1. property子元素:也就是在properties中增加子属性property,设置name、value键值对;
  2. properties文件:抽象子属性抽象成一个 .properties 文件,后通过resource属性引入即可;
  3. 程序代码方式传参:一般不推荐使用,若有加密信息,才会使用;

一、property子元素

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

        <property name="maxActive" value="100"/>
        <property name="maxIdle" value="20"/>
        <property name="minIdle" value="0"/>
        <property name="maxWait" value="500"/>
        <property name="defaultAutoCommit" value="true"/>

        <property name="minEvictableIdleTimeMillis" value="60000"/>
        <property name="removeAbandoned" value="false"/>
        <property name="removeAbandonedTimeout" value="60"/>
</properties>

一旦配置项过多,配置文件就会很大,为解决这个缺点,一般都会将配置参数写到配置文件中,进行调用。

二、properties文件

提取peoperty属性到db.properties文件:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
maxActive=100
maxIdle=20
minldle=0
maxWait=500
defaultAutoCommit=ture
minEvictableIdleTimeMillis=60000
removeAbandoned=false
removeAbandonedTimeout=60

然后将其引入mybatis配置文件

<properties resource="db.properties" />

这样就把db.properties中所有配置都加在到了MyBatis中,如果配置文件中的值需要进行加密,就只能通过程序代码传递了。

三、程序代码方式传参

这种方式一般只针对需要加密的配置参数就行处理,一般与方式二配合使用,以数据库的用户名和密码为例:

public static SqlSessionFactory getSqlSessionFactoryByXml() {
           synchronized (Lock) {
              if (null != sqlSessionFactory) {
                  return sqlSessionFactory;
              }
             String resource = "mybatis-config.xml";
              InputStream inputStream;
              InputStream is = null;
              try {
                  // 加载数据库配置文件
                 is = Resources.getResourceAsStream("db.properties");
                 Properties properties = new Properties();
                 properties.load(is);

                 // 获取加密信息
                String userName = properties.getProperty("username");
                String pwd = properties.getProperty("password");
 
                 // 解密用户名和密码,并重置属性
                 properties.setProperty("username", CyperTool.decodeByBase64(userName));
                 properties.setProperty("pwd", CyperTool.decodeByBase64(pwd));
                 // 读取mybatis配置文件
                 inputStream = Resources.getResourceAsStream(resource);
                 // 通过SqlSessionFactoryBuilder类的builder方法进行构建,并使用程序传递的方式覆盖原有属性
                 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties);
             } catch (IOException e) {
                 e.printStackTrace();
                 return null;
             }
             return sqlSessionFactory;
         }
}

以上就是properties属性的所有内容,推荐使用第二种方式。

另外,如果使用了多种方式加载属性的话,MyBatis将按照如下的顺序加载:

  • 在properties 元素体内的属性首先被读取。
  • 从类路径下资源或properties 元素的 url 属性中加载的属性第二被读取,并且将覆盖已经存在的完全一样的属性。
  • 作为方法参数传递的属性最后被读取,一样也会覆盖已经存在的完全一样的属性,这些属性可能是从 properties 元素体内和资源 /url 属性中加载的。

因此,优先级最高的属性是作为方法参数的属性,然后是资源 / url 属性,最后才是 properties 元素中指定的参数。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值