获取参数
| 传参方式 | 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>