您现在的位置是:网站首页> 内容页

MyBatis-你所不了解的sql和include

  • 优发官网线路
  • 2019-01-24
  • 71人已阅读
简介在前一篇[MyBatis动态SQL(认真看看,以后写SQL就爽多了)]中,详细给出了动态SQL的用法,也收到了至今为止最多的赞和日阅读量。今天在大致讲解一下<sql&g

在前一篇[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 的约束:

可以看待, 必须要有 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 相关的节点都是可以有的。

用的最多的就是 <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最新源码和注释

文章评论

Top