多参数传递
多参数传递有三种主流方式,各自有适用场景。
@Param 注解方式(推荐)
Java
// Mapper 接口
User selectByNameAndEmail(@Param("name") String username, @Param("email") String email);
XML
<select id="selectByNameAndEmail" resultType="com.example.entity.User">
SELECT * FROM user
WHERE username = #{name} AND email = #{email}
</select>
注意:必须使用
@Param注解命名参数,否则#{}无法识别。
POJO 对象方式
Java
// 查询条件对象
public class UserQuery {
private String username;
private String email;
private Integer status;
// getter/setter 省略
}
// Mapper 接口
List<User> selectByCondition(UserQuery query);
XML
<select id="selectByCondition" resultType="com.example.entity.User">
SELECT * FROM user
WHERE username = #{username} AND email = #{email} AND status = #{status}
</select>
Map 方式
Java
// Mapper 接口
List<User> selectByMap(Map<String, Object> params);
// 调用
Map<String, Object> params = new HashMap<>();
params.put("username", "zhangsan");
params.put("email", "test@example.com");
List<User> users = mapper.selectByMap(params);
XML
<select id="selectByMap" resultType="com.example.entity.User">
SELECT * FROM user
WHERE username = #{username} AND email = #{email}
</select>
三种方式对比
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| @Param | 2-3 个参数 | 简洁直观 | 参数多时冗长 |
| POJO | 多个参数,有业务含义 | 类型安全,可复用 | 需额外创建类 |
| Map | 参数不确定,动态查询 | 灵活 | 无类型检查,易出错 |
推荐:参数少用 @Param,参数多且有业务含义用 POJO,避免 Map。
要点总结
- 多参数传递:@Param、POJO、Map 三种方式
- @Param 适合少量参数,简洁直观
- POJO 适合多个参数且有业务含义
- Map 灵活但无类型检查,不推荐常规使用
📝 发现内容有误?点击此处直接编辑