天天看點

MyBatis-你所不了解的sql和include

@

目錄

  • 節點的基礎
  • 節點
  • 節點包含的節點
  • 一起來學習 mybatis

在前一篇[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 的限制:

MyBatis-你所不了解的sql和include

可以看待, 必須要有 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> 節點内部, 還能包含很多節點

MyBatis-你所不了解的sql和include

所有的動态 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? 學習其使用和源碼呢?那麼, 在部落格園關注我吧!!

我自己打算把這個源碼系列更新完畢, 同時會更新相應的注釋。快去 star 吧!!

mybatis最新源碼和注釋

MyBatis-你所不了解的sql和include

作者:阿進的寫字台

出處:https://www.cnblogs.com/homejim/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。