Mybatis中的SQL代码有几种常用的抽取方法:
- 使用parameter接收参数:
<select id="findUser" parameterType="String" resultType="User">
select * from user where name = #{username}
</select>
在代码中设置parameters:
map.put("username", "John");
mapper.selectUser(map);
- 使用@param注解指定参数别名:
<select id="findUser" resultType="User">
select * from user where name = @{name,jdbcType=VARCHAR}
</select>
设置parameters:
map.put("name", "John");
mapper.selectUser(map);
- 使用@Param注解实际参数名:
<select id="findUser" resultType="User">
select * from user where name = @username
</select>
设置parameters:
map.put("username", "John");
mapper.selectUser(map);
- 使用sql片段抽取:
<sql id="selectColumns">
id, name, age
</sql>
<select id="findUsers" resultType="User">
select <include refid="selectColumns"/> from users
</include>
- 使用property抽取:
<property name="username" value="zhangsan"/>
select * from user where name = ${username}
使用上述几种方式,可以有效减少SQL代码的重复,提高维护性。
- 这种抽取方法也适用于Mybatis的where、set、foreach语句。