zoukankan      html  css  js  c++  java
  • MyBatis-你所不了解的sql和include

    @

    在前一篇[MyBatis动态SQL(认真看看, 以后写SQL就爽多了)]中, 详细给出了动态 SQL 的用法, 也收到了至今为止最多的赞和日阅读量。

    今天在大致讲解一下 <sql> 和 <include> 节点的使用。

    <sql> 节点的基础

    对于 <sql> 节点, 很多人的理解估计就是用来包含数据库的字段的, 以便用来替换所有字段 「*」 符号, 以此来提高 SQL 的执行速度。

    类似这样

      <sql id="Base_Column_List">
        student_id, name, phone, email, sex, locked, gmt_created, gmt_modified
      </sql>
    

    但是在 mybatis 的定义中, <sql> 节点是用来定义可重用的 SQL 代码段。

    它可以被包含在其他语句里面, 使用 <include> 节点来包含。

    而且, 它里面是可以使用 ${} 占位符参数化的(注意, 此处的参数不是调用时传进来的), 不同的属性值通过包含的实例而变化。

    比如

    <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
    

    因此, 我们在连接查询时, 就不用手写那么多的别名了

    <select id="selectUsers" resultType="map">
      select
        <include refid="userColumns"><property name="alias" value="t1"/></include>,
        <include refid="userColumns"><property name="alias" value="t2"/></include>
      from some_table t1
        cross join some_table t2
    </select>
    

    <include> 节点

    看一下 include 的约束:

    include节点的DTD

    可以看待, 必须要有 refid, 可以有0个或多个 property。 通过 property 标签, 将我们的属性包含进来。 如以上的

     <include refid="userColumns"><property name="alias" value="t1"/></include>,
     <include refid="userColumns"><property name="alias" value="t2"/></include>
    

    占位符也可以被用在 <include> 元素的 refid 属性里

    <include refid="${include_target}"/>
    

    <sql> 节点包含的节点

    <sql> 节点内部, 还能包含很多节点

    sql节点所能包含的节点
    所有的动态 SQL 相关的节点都是可以有的。

    用的最多的就是 <include> 节点。

    <sql id="sometable">
      ${prefix}Table
    </sql>
    
    <sql id="someinclude">
      from
        <include refid="${include_target}"/>
    </sql>
    
    <select id="select" resultType="map">
      select
        field1, field2, field3
      <include refid="someinclude">
        <property name="prefix" value="Some"/>
        <property name="include_target" value="sometable"/>
      </include>
    </select>
    

    一起来学习 mybatis

    你想不想来学习 mybatis? 学习其使用和源码呢?那么, 在博客园关注我吧!!

    我自己打算把这个源码系列更新完毕, 同时会更新相应的注释。快去 star 吧!!

    mybatis最新源码和注释
    mybatis使用和源码

  • 相关阅读:
    Flink基于EventTime和WaterMark处理乱序事件和晚到的数据
    flink 有什么优点
    Flink-Kafka 连接器及exactly-once 语义保证
    腾讯大学
    Qt 获取文件路径、文件名、后缀
    Qt QDir::currentPath()和QAppllication::appllicationDirPath()用法区别
    Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
    Qt comboBox设置下拉菜单()
    Qt 快速读写Excel指南
    可见光的波长与频率对照表
  • 原文地址:https://www.cnblogs.com/homejim/p/9961102.html
Copyright © 2011-2022 走看看