zoukankan      html  css  js  c++  java
  • MyBatis配置项--properties

     properties

    这些属性都是可外部配置且可动态替换的,既可以在典型的java属性文件中配置,也可以通过properties元素的子元素来传递。例如:

    <properties resource="org/mybatis/example/config.properties">

      <property name="username" value="dev_user"/>

      <property name="password" value="123456"/>

    </properties>

     

    然后其中的属性就可以在整个配置文件中被用来替换需要动态配置的属性值。比如:

    <dataSource type="POOLED">

      <property name="driver" value="${driver}"/>

      <property name="url" value="${url}"/>

      <property name="username" value="${username}"/>

      <property name="password" value="${password}"/>

    </dataSource>

    这个例子中的username和password将会由properties元素中设置的相应值来替换。driver和url属性将会由config.properties文件中对应的值来替换。为配置提供了诸多灵活选择。

    属性也可以被传递到SQLSessionFactoryBuilder.build()方法中。例如:

    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);

    // ... or ...

    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);

    如果属性在不止一个地方进行了配置,那么MyBatis将按照下面的顺序来加载:

    ·在properties元素体内指定的属性首先被读取。

    ·然后根据properties元素中的resource属性读取类路径下属性文件或根据url属性指定的路径读取属性文件,并覆盖已读取的同名属性。

    ·最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

    因此,通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的是properties属性中指定的属性。

    从MyBatis 3.4.2 开始,可以为占位符指定一个默认值。例如:

    <dataSource type="POOLED">

      <!-- ... -->

      <property name="username" value="${username:ut_user}"/> <!-- If 'username' property not present, username become 'ut_user' -->

    </dataSource>

    这个特性默认是关闭的。如果你想为占位符指定一个默认值,应该添加一个指定的属性来开启这个特性。例如:

    <properties resource="org/mybatis/example/config.properties">

      <!-- ... -->

      <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- Enable this feature -->

    </properties>

     

    提示,可以使用”:”作为属性键(eg. db:username)或者可以在sql定义中使用OGNL表达式的三元运算符(eg. ${tableName != null ? tableName : ‘global_constants’}),应该通过增加一个指定的属性来改变分隔键和默认值的字符。例如:

    <properties resource="org/mybatis/example/config.properties">

      <!-- ... -->

      <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- Change default value of separator -->

    </properties>

    <dataSource type="POOLED">

      <!-- ... -->

      <property name="username" value="${db:username?:ut_user}"/>

    </dataSource>

  • 相关阅读:
    设计模式C++学习笔记之一(Strategy策略模式)
    web服务器上某一中文名文件无法访问
    C++之多态性与虚函数
    常用的16个c/c++面试题
    C/C++ 笔试、面试题目大汇总
    利用jsoncpp将json字符串转换为Vector
    STL中vector、list、deque和map的区别
    C++类的继承中构造函数和析构函数调用顺序例子
    LNMP下Nginx 中文文件名或目录404无法访问的解决方法
    Python Web开发框架Django
  • 原文地址:https://www.cnblogs.com/arrows/p/10335066.html
Copyright © 2011-2022 走看看