Mybatis 中的<sql>封装和<include>重用

本文详细介绍了MyBatis中的&lt;sql&gt;节点和&lt;include&gt;节点的作用及使用方法。通过&lt;sql&gt;节点可以定义可重用的SQL代码片段,并通过&lt;include&gt;节点引入这些代码片段,简化SQL语句编写,特别是在进行连接查询时能有效减少别名的重复书写。

<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>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190722163623119.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMxNTgzMTc=,size_16,color_FFFFFF,t_70)

<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>

转自:https://www.cnblogs.com/homejim/p/9961102.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值