如果某些sql片段在多个sql语句中被复用,可以将这些sql片段抽取为一个单独的映射文件(例如SQL语句中*,都尽可能用具体的字段名代替,以提高执行效率,这个过程中会出现大量重复sql片段).
抽取片段
<!-- 为何要抽取以下片段,去除SQL语句中的*,可以提高执行效率 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace(命名空间):映射文件的唯一标识 -->
<mapper namespace="CommonSQL">
<!-- 通过sql标签>id唯一标识片段 -->
<sql id="commonSql">
id,user_name,
password,
name,
age,
sex,
birthday,
created,
updated
</sql>
</mapper>
引用片段
- mybatis-config.xml
<mappers>
<mapper resource="CommonSQL.xml"
</mappers>
- 需要使用片段的映射文件:在需要使用该sql片段的地方通过include标签的refid属性引用该sql片段:
<!-- <sql id="commonSql">
id,user_name,
password,
name,
age,
sex,
birthday,
created,
updated
</sql> -->
<select id="queryUsersLikeUserName" resultType="User">
select <include refid="CommonSQL.commonSql"></include> from tb_user where user_name like '%' #{userName} '%'
</select>
评论区