【MyBatis】MyBatis 如何去除重复的 SQL?

在 MyBatis 中,我们可以使用 sql 片段来消除 SQL 语句的重复。

具体做法是:

  1. 定义 sql 片段:
<sql id="selectColumns">
  id, name, age
</sql>
  1. 引用 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 片段。

  1. 也可以传递参数到 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 的重复