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

mybatis中xml文件结构

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

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

 
  
  
  
      
      
      
     
     
     
     
         
         
     
     
     
     
     
     
     
     
     
         
         
             
             
             
             
                 
                 
                 
                 
             
         
     
     
     
     
     
         
         
     
 

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

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

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

一、property子元素


		
        
        
        

        
        
        
        
        

        
        
        

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

二、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配置文件


这样就把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 元素中指定的参数。

你可能感兴趣的:(mybatis配置文件,java,mybatis)