在 MyBatis 中,我们可以使用 sql 片段来消除 SQL 语句的重复。
具体做法是:
- 定义 sql 片段:
<sql id="selectColumns">
id, name, age
</sql>
- 引用 sql 片段:
<select id="selectUser" resultType="User">
select
<include refid="selectColumns"/>
from users
where id = #{id}
</select>
<select id="selectUsers" resultType="User">
select
<include refid="selectColumns"/>
from users
</select>
这里两个 SQL 语句复用了 selectColumns 片段。
- 也可以传递参数到 sql 片段:
<sql id="selectColumns">
id, <if test="column == 'name'">name</if> <if test="column == 'age'">age</if>
</sql>
<select id="selectUser" parameterType="map" resultType="User">
select
<include refid="selectColumns">
<property name="column" value="name"/>
</include>
from users
where id = #{id}
</select>
通过传参实现动态查询列。
通过 sql 片段可以实现:
- 复用 sql 代码
- 提高可维护性
- 防止 sql 的重复