MyBatis(五)动态SQL 之 内置参数:_parameter&_databaseId

一、两个内置参数

  不只是方法传递过来的参数可以被用来判断,取值。
         mybatis默认还有两个内置参数:
         (1)_parameter:代表整个参数
             单个参数:_parameter就是这个参数
             多个参数:参数会被封装为一个map;_parameter 就是代表这个 map
  (2)_databaseId:如果配置了databaseIdProvider标签。
    _databaseId:就是代表当前数据库的别名(如mysql,Oracle)
 
  若在 mybatis 配置文件中配置了 databaseIdProvider , 则可以使用 “_databaseId”变量, 这样就可以根据不同的数据库厂商构建特定的语句

二、测试

  在接口中声明方法:

public List<Employee> getEmpsTestInnerParameter(Employee employee);

  在对应的 xml 中配置:

    <!--
        public List<Employee> getEmpsTestInnerParameter(Employee employee);
    -->
    <select id="getEmpsTestInnerParameter" resultType="Employee">
        <if test="_databaseId=='mysql'">
            select * from tbl_employee
            <if test="_parameter!=null">  <!-- 先通过_parameter判断传递的参数中是否有值-->
                where last_name = #{_parameter.lastName}
            </if>
        </if>
        <if test="_databaseId=='oracle'">
            select * from employees
            <if test="_parameter!=null">
                where last_name = #{lastName}
            </if>
        </if>

    </select>

  在核心配置文件 mybatis-config.xml 中动态切换数据库

    <environments default="dev_mysql">     切换mysql或Oracle数据库环境
        <environment id="dev_mysql">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    
        <environment id="dev_oracle">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${orcl.driver}" />
                <property name="url" value="${orcl.url}" />
                <property name="username" value="${orcl.username}" />
                <property name="password" value="${orcl.password}" />
            </dataSource>
        </environment>
    </environments>

    <databaseIdProvider type="DB_VENDOR">
        <!--  为不同的数据库厂商起别名      -->
        <property name="MySQL" value="mysql"/>
        <property name="SQL Server" value="sqlserver"/>
        <property name="DB2" value="db2"/>
        <property name="Oracle" value="oracle" />
    </databaseIdProvider>
原文地址:https://www.cnblogs.com/niujifei/p/15242235.html