深入解析:【Java-MyBatis】MyBatis 支持哪些传参数的方法?

在这里插入图片描述

下面我将详细讲解 MyBatis 支持的参数传递方法,并附上通俗易懂的解释和示例:

1. 单个基本类型参数

当方法只有一个基本类型参数(如 int, String)时,MyBatis 会自动识别:

User getUserById(int id);
// 接口方法
<select id="getUserById" resultType="User">
  SELECT * FROM user WHERE id = #{id} <!-- 直接使用参数名 -->
  </select>

就像告诉服务员:“给我3号桌的菜单” - #{id} 就是桌号


2. @Param 注解(推荐)

当方法有多个参数时,用 @Param 给参数起别名:

List<
User> findUsers(
@Param("name") String name,
@Param("minAge") int minAge
);
<select id="findUsers" resultType="User">
  SELECT * FROM user
  WHERE name = #{name} AND age > #{minAge}
</select>

就像点餐:“要宫保鸡丁(@Param(‘main’))和酸辣汤(@Param(‘soup’))”


3. Map 传参

将多个参数放入 Map 中传递:

Map<
String, Object> params = new HashMap<
>();
params.put("role", "admin");
params.put("status", 1);
List<
User> getUsersByMap(Map params);
<select id="getUsersByMap" resultType="User">
  SELECT * FROM user
  WHERE role = #{role} AND status = #{status}
</select>

️ 类似递菜单:把要点的菜(参数)都写在便签上交给服务员


4. JavaBean 对象传参

使用 POJO 对象封装参数:

public class UserQuery
{
private String name;
private Integer minAge;
// getter/setter
}
List<
User> searchUsers(UserQuery query);
<select id="searchUsers" resultType="User">
  SELECT * FROM user
  WHERE name = #{name} AND age > #{minAge}
</select>

就像打包行李:把零散物品(参数)装进行李箱(JavaBean)统一携带


5. 集合类型参数

处理 List/Array 等集合参数:

List<
User> getUsersByIds(@Param("ids") List<
Integer> ids);
<select id="getUsersByIds" resultType="User">
  SELECT * FROM user
  WHERE id IN
    <foreach item="id" collection="ids" open="(" separator="," close=")">
    #{id}
  </foreach>
</select>

类似报菜名:“要1号、3号、5号套餐” → MyBatis 自动拆解集合


6. 位置参数(不推荐)

按参数位置引用(MyBatis 3.3 前支持):

<select id="findUser" resultType="User">
  SELECT * FROM user
  WHERE name = #{0} AND age = #{1} <!-- 0代表第一个参数 -->
  </select>

⚠️ 风险:像说"给我那个和那个" - 容易混淆顺序


7. 特殊参数 _parameter

所有参数的统一引用点:

<select id="complexQuery" resultType="User">
  <!-- 通过_parameter访问整个参数对象 -->
    WHERE name = #{_parameter.name}
  </select>

总结对比表

传参方式适用场景优点缺点
@Param 注解多参数方法直观清晰需写注解
JavaBean 对象复杂查询条件结构化/复用性强需创建额外类
Map动态参数灵活无需定义类类型不安全
集合参数IN 查询天然支持集合操作需结合 foreach
位置参数简单临时查询快速实现可读性差/易出错

在这里插入图片描述

最佳实践建议

  1. 1-2个参数 → 优先用 @Param 注解
  2. 3+个参数 → 使用 JavaBean 封装
  3. 动态条件查询 → 选用 Map 或 JavaBean+动态SQL
  4. 避免使用位置参数,提高可维护性
posted @ 2025-08-26 12:12  wzzkaifa  阅读(26)  评论(0)    收藏  举报