下面主要介绍与<select>标签有关的几个标签的使用
这里先假设有个POJO类叫User,有一张表t_user
ClassUser{ privateLongid; privateStringname; privateIntegerage; //get set}
CREATETABLE `t_user` ( `id` int(11)NOTNULL AUTO_INCREMENT, `name` varchar(30)NULL DEFAULT NULL, `age` int(11)NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE )
查询一个列表或者一条记录可以使用下面的方式实现
<selectid="getList"parameterType="package.User"resultType="package.User"> SELECT t.ID,t.name,t.age FROM t_user t </select>
但是有的时候我们需要通过另外一个<select>标签(id不能重复)实现另外的查询,可能条件不同,可能对返回结果处理有特殊要求的需求,如下
<selectid="getAnotherList"parameterType="package.User"resultType="package.User"> SELECT t.ID,t.name,t.age FROM t_user t </select>
可以发现t.ID,t.name,t.age属于重复的部分,那么可不可以只写一遍呢,答案是肯定的,下面就是我们的<sql>和<include>标签要登场了。
<!-- 在 <sql> 标签中定义可重用的 SQL 片段 -->
<sqlid="userFields"> t.ID,t.name,t.age </sql><selectid="getList"parameterType="package.User"resultType="package.User"> SELECT <includerefid="userFields"/> FROM t_user t </select><selectid="getAnotherList"parameterType="package.User"resultType="package.User"> SELECT <includerefid="userFields"/> FROM t_user t </select>
<sql> 标签用于定义可重用的 SQL 片段,类似于定义一个命名的 SQL 片段。在大型的查询或数据库操作中,可能有一些公共的 SQL 语句片段,例如 WHERE 条件、JOIN 条件等。为了避免重复编写这些 SQL 片段,可以使用 <sql> 标签来定义它们。
<include> 标签用于在一个 SQL 映射文件中引用之前定义的 <sql> 标签,实现 SQL 片段的重用。通过 <include> 标签,我们可以在不同的地方插入之前定义的 SQL 片段,使代码更加模块化和易于维护。