zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    误报的java.sql.SQLException: Parameter number 21 is not an OUT parameter
    mysql bin-log和innodb_log的关系
    线上mysql内存持续增长直至内存溢出被killed分析(已解决)
    mysql服务器io等待高定位与分析
    mysql 5.6到percona 5.6小版本升级
    mysql内存消耗分析
    centos 7安装mysql报错-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory
    windows 7文件误删shift+delete后找回
    oschina github使用指南
    couchbase单向同步
  • 原文地址:https://www.cnblogs.com/niujifei/p/15242235.html
Copyright © 2011-2022 走看看