sql元素
一 作用
MyBatis xml文件中对于重复出现的sql片段可以使用标签提取出来,在使用的地方使用标签引用就行
二 例子
2.1 原始做法
<mapper namespace="com.mapper.RoleMapper">
<resultMap id="roleMap" type="com.pojo.role">
<id property="id" column="id"/>
<result property="roleName" column="role_name"/>
<result property="note" column="note"/>
</resultMap>
<select id="getRole" parameterType="long" resultMap="roleMap">
select id, role_name, note from t_role where id = #{id}
</select>
</mapper>
2.2 现在的做法
<mapper namespace="com.mapper.RoleMapper">
<resultMap id="roleMap" type="com.pojo.role">
<id property="id" column="id"/>
<result property="roleName" column="role_name"/>
<result property="note" column="note"/>
</resultMap>
<sql id="roleCols">
id,role_name,note
</sql>
<select id="getRole" parameterType="long" resultMap="roleMap">
select <include refid="roleCols"/> from t_role where id = #{id}
</select>
</mapper>
还支持出纳底边梁给sql元素
<mapper namespace="com.mapper.RoleMapper">
<resultMap id="roleMap" type="com.pojo.role">
<id property="id" column="id"/>
<result property="roleName" column="role_name"/>
<result property="note" column="note"/>
</resultMap>
<sql id="roleCols">
${alias}.id, ${alias}.role_name, ${alias}.note
</sql>
<select id="getRole" parameterType="long" resultMap="roleMap">
select
<include refid="roleCols">
property name="alias" value="r"/>
</include>
from t_role r where id = #{id}
</select>
</mapper>
<!-- 在include元素中定义了一个命名为alias的变量,其值为SQL中表t_role的别名r,然后sql元素就能够使用这个变量名了-->