MyBatis(动态SQL2)

一、MyBatis动态SQL的两个内置参数

_parameter:

_databaseId:

接口代码:

    
  //内置参数的测试
  public List<Employee> getEmpsTestInnerParamter(Employee employee);

xml代码:

    <!--两个内置参数:
        不只是方法传递过来的参数可以被用来判断,取值。。。
        mybatis默认还有两个内置参数:
        _parameter:代表整个参数
            单个参数:_parameter就是这个参数
            多个参数:参数会被封装为一个map;_parameter就是代表这个map

        _databaseId:如果配置了databaseIdProvider标签。
            _databaseId 就是代表当前数据库的别名
    -->
    <select id="getEmpsTestInnerParamter" resultType="emp">
        <if test="_databaseId=='mysql'">
          select * from tbl_employee
          <if test="_parameter != null">
              where last_name=#{lastName}
          </if>
        </if>
        <if test="_databaseId=='oracle'">
            select * from employees
            <if test="_parameter != null">
                where last_name=#{lastName}
            </if>
        </if>
    </select>

全局配置文件mybatis-config.xml:

    <!--
        databaseIdProvider:支持多数据库厂商
        type:作用就是得到数据库厂商的标识,mybatis就能根据数据库厂商的标识来执行不同的sql。
    -->
    <databaseIdProvider type="DB_VENDOR">
        <!-- 为不同的数据库厂商起别名 -->
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
        <property name="SQL Server" value="sqlserver"/>
    </databaseIdProvider>

_parameter相当于传入的参数employee,判断employee是否为空,若不为空则执行where条件。

即简单一句话,有值才会执行,当为null,就成了查所有。 

二、bind绑定

在增删改查的标签中还可以写bind标签。

    <select id="getEmpsTestInnerParamter" resultType="emp">

    <!-- bind:可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值 -->
        <bind name="_lastName" value="'%'+lastName+'%'"/>

        <if test="_databaseId=='mysql'">
        select * from tbl_employee
        <if test="_parameter != null">
            where last_name like #{_lastName}
        </if>
        </if>
    </select>

把传来的参数拼接后绑定一个变量。或者直接使用 '%${lastName}%'拼接(不安全)。

三、sql标签

抽取可重用的sql片段,方便后面引用。

    <!--抽取可重用的sql片段,方便后面引用
        1、sql抽取:经常将要查询的列名,或者插入用的列名抽取出来方便引用
        2、include来引用已经抽取的sql
        3、include还可以自定义一些property,sql标签内部就能使用自定义的属性,然后${}取值,#{}不能用。
    -->
    <sql id="insertColumn">
      last_name,email,gender,d_id
    </sql>

引用:在需要该sql片段的地方引用

<include refid="insertColumn"></include>

 

 

 

posted @ 2019-11-26 15:26  微微亮  阅读(176)  评论(0编辑  收藏  举报