本章只对 Dao 接口声明中,入参为单个参数 且 类型为基础类型(Integer、Long、String 等)做说明,对于复杂类型( Bean、Map 等)和多参数类型 统一到多参数章节说明
在 Mapper 的 XML 文件中,入参声明的 parameterType 属性,是可选的参数,可以不指定
内置参数 _parameter 代表的是 Dao 接口中声明的所有参数,当 Dao 的声明为单个参数时,此内置参数代表的 即当前参数
一、标准的
使用内置参数 _parameter 获取当前的基础类型参数
- 1、仅参数取值
<select id="findByUserId" resultType="com.xl.entity.Detail">
SELECT * FROM detail WHERE user_id = #{_parameter}
</select>
- 2、取值加判断
<select id="findByUserId" resultType="com.xl.entity.Detail">
SELECT * FROM detail WHERE
<if test="_parameter != null"> user_id = #{_parameter} </if>
</select>
二、随意的
单个参数 且 为基础类型时,在取值时,可以使用随意的字符;但是,进行条件判断时,必须使用 _parameter 判断
- 1、仅参数取值
<select id="findByUserId" resultType="com.xl.entity.Detail">
SELECT * FROM detail WHERE user_id = #{abc}
</select>
- 2、取值加判断
<select id="findByUserId" resultType="com.xl.entity.Detail">
SELECT * FROM detail WHERE
<!-- 判断时非 _parameter 则异常:There is no getter for property named 'userId' in 'class java.lang.String' -->
<if test="_parameter != null"> user_id = #{abc} </if>
</select>
三、注解的
在 Dao 中,通过 @Param 对参数进行命名,此时 XML 中 无论 仅取值 还是 加判断,都必须使用此命名后的名称
List<Detail> findByUserId(@Param("userId") String userId);
<select id="findByUserId" resultType="com.xl.entity.Detail">
SELECT * FROM detail WHERE
<if test="userId != null"> user_id = #{userId} </if>
</select>