Skip to content

获取参数

传参方式XML写法
单参数#{任意名称}
多参数#{param1}@Param
对象#{属性名}
Map#{key}

单个参数

单参数可以直接用 #{参数名},参数名不同也可以

java
User selectById(Long id);
xml
<select id="selectById" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

多个参数

parm

java
User selectByNameAndAge(String name, Integer age);

默认会变成

java
param1, param2

注解

java
User selectByNameAndAge(@Param("name") String name,
                        @Param("age") Integer age);
sql
WHERE name = #{name} AND age = #{age}

MyBatis 内部参数结构其实是:

java
{
  name: xxx,
  age: xxx,
  param1: xxx,
  param2: xxx
}

对象

XML中直接使用对象的属性名即可

java
User selectByCondition(UserQueryDTO queryDTO);
xml
<select id="selectByCondition" resultType="User">
    SELECT * FROM user
    WHERE name = #{name}
      AND age = #{age}
</select>

MyBatis 会自动调用UserQueryDTO的getter方法

List

如果传入List,请使用@Param注明List的名字

Map

XML中使用Map的key即可

java
User selectByMap(Map<String, Object> params);
java
params.put("name", "张三");
params.put("age", 18);
sql
WHERE name = #{name} AND age = #{age}

空值处理

xml
WHERE name = #{name}

会转义成为:

sql
name = null   -- 永远为 false

我们需要进行判空:

xml
<if test="name != null">
    AND name = #{name}
</if>