目录

MyBatis-传递多个参数的方式

MyBatis 传递多个参数的方式

在 MyBatis 中,我们经常需要向 mapper 传递多个参数,比如查询条件、分页参数等。然而,由于 MyBatis 的参数处理方式较为特殊,直接传递多个参数可能会导致无法识别。本文将介绍几种常见的方式来传递多个参数。


1️⃣ 使用 @Param 注解(推荐)

📌 适用场景:适用于参数数量较少,且参数名称固定的情况。 @Select(“SELECT * FROM users WHERE name = #{name} AND age = #{age}”) List getUsersByNameAndAge(@Param(“name”) String name, @Param(“age”) int age); 💡 说明

  • @Param("name") 让 MyBatis 识别 name 这个参数,SQL 语句中可直接使用 #{name}
  • 适用于 参数数量较少,且参数名称固定 的情况。

2️⃣ 使用 Map 传递参数

📌 适用场景:参数动态变化,或者参数数量较多时。 @Select(“SELECT * FROM users WHERE name = #{name} AND age = #{age}”) List getUsersByMap(Map params); 调用示例 : Map paramMap = new HashMap<>(); paramMap.put(“name”, “Tom”); paramMap.put(“age”, 25); mapper.getUsersByMap(paramMap); 💡 说明

  • 使用 Map 传递多个参数,可以动态添加参数。
  • SQL 语句中仍然使用 #{name}#{age} 进行参数映射。

3️⃣ 使用实体类封装参数

📌 适用场景:参数较多且结构固定时,适用于对象查询。 @Select(“SELECT * FROM users WHERE name = #{name} AND age = #{age}”) List getUsersByEntity(User user); 调用示例 : User user = new User(); user.setName(“Tom”); user.setAge(25); mapper.getUsersByEntity(user); 💡 说明

  • 适用于参数固定的情况,代码结构清晰,可读性高。
  • 但是不适用于参数可变的查询需求。

4️⃣ 直接使用 ListArray

📌 适用场景:批量查询、IN 查询等。 @Select(“SELECT * FROM users WHERE id IN (${ids})”) List getUsersByIds(@Param(“ids”) List ids); 调用示例 : List idList = Arrays.asList(1, 2, 3); mapper.getUsersByIds(idList); 💡 说明

  • 适用于 批量查询 ,但要注意 SQL 注入风险。
  • 如果 IN 语句中参数较多,建议使用 foreach 方式处理(XML 方式)。

5️⃣ XML 方式处理多个参数(parameterType

mapper.xml 文件中,MyBatis 允许使用 parameterType 传递对象参数。 SELECT * FROM users WHERE name = #{name} AND age = #{age} 💡 说明

  • XML 方式可以配合 Map、实体类等方式传递多个参数。
  • parameterType 中使用 map 时,可以动态传递参数。

6️⃣ 对比总结 📊

方式适用场景代码简洁度灵活性
@Param 注解少量参数
Map 传参参数动态变化
实体类封装固定结构参数
List/Array批量查询
XML 配合 parameterTypeXML 方式参数传递

7️⃣ 总结 🚀

@Param 适用于 少量参数,简单清晰 。 ✅ Map 适用于 参数动态变化的查询 。 ✅ 实体类适用于 结构固定的查询 ,推荐封装参数对象。 ✅ List/Array 适用于 批量查询 ,但注意 SQL 注入风险。 ✅ XML 方式适用于 复杂 SQL 处理 ,但可读性相对较低。