单个参数

  • 使用parameterType指定参数类型
  • 使用#{paramName}表示参数值
  • 也可指定参数的类型等属性(同result,以逗号分隔):#{paramName, jdbcType=类型}

多个参数

以根据用户名(username)和密码(password)查询该用户为例

User(id, username, password),别名为user

使用map

  • 将参数定义为Map类型(parameterType="map"
    SQL中使用#{key}表示value
  • 编写代码时并不会提示需要哪些key,很少使用
示例-接口
1
getUser(Map<String, Object>);
示例-mapper
1
2
3
4
5
6
<select id="getUser" parameterType="map" resultType="user">
select id, username, password
from user
where username=#{username}
and password=#{password}
</select>

使用注解

  • 接口上对参数使用@Param("paramName") Type paramName对参数添加注解
  • mapper配置文件中对应的方法无需设置parameterType属性
  • SQL中使用#{paramName}表示值
  • 参数较多时比较麻烦
示例-接口
1
getUser(@Param("username") String username, @Param("password")String password);
示例-Mapper
1
2
3
4
5
6
<select id="getUser" resultType="user">
select id, username, password
from user
where username=#{username}
and password=#{password}
</select>

使用Bean

  • 将参数设置为Bean,设置parameterType为该Bean全限定名或别名
  • SQL中使用#{属性名}表示值

定义Bean: ParamBean(username, password),别名为”paramsBean”

示例-接口
1
getUser(ParamBean params);
示例-Mapper
1
2
3
4
5
6
<select id="getUser" parameterType="paramsBean" resultType="user">
select id, username, password
from user
where username=#{username}
and password=#{password}
</select>

结合使用

  • 部分参数使用注解,部分参数使用Bean
  • 将Bean使用注解传入,即参数为@Param("paramsBean") ParamBean paramsBean
  • SQL中使用#{paramsBean.property}表示值

为SQL加上limit限定参数

示例-接口
1
getUser(@Param("limit") int limit, @Param("paramsBean") ParamBean paramsBean);
示例-Mapper
1
2
3
4
5
6
7
<select id="getUser" resultType="user">
select id, username, password
from user
where username=#{paramsBean.username}
and password=#{paramsBean.password}
limit #{limit}
</select>

存储过程

  • 存储过程的参数有IN、OUT、INOUT三种模式,可通过mode指定
  • SQL中使用#{paramsName, mode=模式}