news 2026/4/15 18:24:11

HoRain云--MyBatis多参数查询最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--MyBatis多参数查询最佳实践

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

1. 使用 @Param 注解(推荐用于参数较少场景)

2. 使用 Map 传参(适合动态查询)

3. 使用 Java Bean 对象(推荐用于复杂查询)

4. MyBatis-Plus QueryWrapper(现代化选择)

动态 SQL 标签详解

实用建议


在 MyBatis 中进行多参数查询有多种灵活的方式,下面我为你详细介绍最常用的几种方法及其适用场景。

方法

适用场景

优点

缺点

@Param 注解

参数数量较少(2-5个)的固定查询

代码直观,参数名明确,可读性强

参数过多时代码冗长

Map 传参

动态条件查询,参数不固定

灵活性高,适合条件动态变化

类型不安全,key容易拼写错误

Java Bean 对象

参数较多且有明确业务含义

结构清晰,类型安全,易于维护

需要创建额外的类

MyBatis-Plus QueryWrapper

使用 MyBatis-Plus 框架的项目

链式调用,编程式构建条件

仅适用于 MyBatis-Plus

1. 使用 @Param 注解(推荐用于参数较少场景)

这是最常用的多参数传递方式,通过在接口方法参数前添加@Param注解来为参数命名。

Mapper 接口:

public interface UserMapper { User findByUsernameAndEmail( @Param("username") String username, @Param("email") String email ); // 用于 IN 查询的列表参数 List<User> findUsersByIds(@Param("ids") List<Long> ids); }

XML 映射文件:

<select id="findByUsernameAndEmail" resultType="User"> SELECT * FROM users WHERE username = #{username} AND email = #{email} </select> <select id="findUsersByIds" resultType="User"> SELECT * FROM users WHERE id IN <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </select>

2. 使用 Map 传参(适合动态查询)

当查询条件不固定时,使用 Map 可以灵活地传递参数。

Mapper 接口:

public interface UserMapper { List<User> findUsersByCondition(Map<String, Object> params); }

Service 层调用:

public List<User> searchUsers(String name, Integer age, String email) { Map<String, Object> params = new HashMap<>(); if (name != null) params.put("name", name); if (age != null) params.put("age", age); if (email != null) params.put("email", email); return userMapper.findUsersByCondition(params); }

XML 映射文件(使用动态 SQL):

<select id="findUsersByCondition" parameterType="map" resultType="User"> SELECT * FROM users <where> <if test="name != null"> AND name LIKE CONCAT('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> <if test="email != null"> AND email = #{email} </if> </where> </select>

3. 使用 Java Bean 对象(推荐用于复杂查询)

当参数较多且有明确业务含义时,创建一个专门的查询参数对象是最佳选择。

查询参数类:

public class UserQueryParams { private String username; private String email; private Integer minAge; private Integer maxAge; private Date createTimeStart; private Date createTimeEnd; // getter 和 setter 方法 }

Mapper 接口:

public interface UserMapper { List<User> findUsersByQueryParams(UserQueryParams params); }

XML 映射文件:

<select id="findUsersByQueryParams" parameterType="UserQueryParams" resultType="User"> SELECT * FROM users <where> <if test="username != null"> AND username = #{username} </if> <if test="email != null"> AND email = #{email} </if> <if test="minAge != null"> AND age >= #{minAge} </if> <if test="maxAge != null"> AND age <= #{maxAge} </if> <if test="createTimeStart != null"> AND create_time >= #{createTimeStart} </if> <if test="createTimeEnd != null"> AND create_time <= #{createTimeEnd} </if> </where> ORDER BY create_time DESC </select>

4. MyBatis-Plus QueryWrapper(现代化选择)

如果你使用 MyBatis-Plus,QueryWrapper 提供了更简洁的链式编程方式。

使用示例:

@Service public class UserService { @Autowired private UserMapper userMapper; public List<User> findUsers(String username, Integer minAge, Integer maxAge) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); if (username != null) { queryWrapper.like("username", username); } if (minAge != null) { queryWrapper.ge("age", minAge); } if (maxAge != null) { queryWrapper.le("age", maxAge); } queryWrapper.orderByDesc("create_time"); return userMapper.selectList(queryWrapper); } // 分页查询 public Page<User> findUsersWithPage(Page<User> page, UserQueryParams params) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); // 构建查询条件... return userMapper.selectPage(page, queryWrapper); } }

动态 SQL 标签详解

MyBatis 提供了强大的动态 SQL 功能,让多条件查询更加灵活:

实用建议

  1. 简单查询(2-3个参数)优先使用@Param 注解

  2. 动态条件查询使用Map​ 或QueryWrapper

  3. 复杂业务查询使用Java Bean 对象

  4. 列表查询结合<foreach>​ 标签

  5. 新项目推荐使用MyBatis-Plus​ 简化开发

选择哪种方式主要取决于你的具体需求:参数数量、是否动态变化、代码可维护性要求等。希望这些示例能帮助你更好地使用 MyBatis 进行多参数查询!

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 18:01:50

HoRain云--PHP+Redis高并发实战指南

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

作者头像 李华
网站建设 2026/4/8 12:25:26

导师推荐!继续教育必备!10款一键生成论文工具TOP10测评

导师推荐&#xff01;继续教育必备&#xff01;10款一键生成论文工具TOP10测评 2026年继续教育论文写作工具测评&#xff1a;功能与效率的深度解析 在当前继续教育日益普及的背景下&#xff0c;论文撰写已成为许多学员必须面对的重要任务。然而&#xff0c;从选题构思到文献整理…

作者头像 李华
网站建设 2026/4/15 10:19:03

2003-2025年上市公司地级市政府政绩关注度数据

数据简介 地级市政绩关注度是地级市政府工作报告中提及各个上市公司的次数。在中国特色的治理体系中&#xff0c;地方官员的政绩信息绝非简单的个人功过簿&#xff0c;而是一套深刻影响微观企业行为与宏观区域走向的“制度信号”&#xff0c;而政府工作报告文本正是理解中国资…

作者头像 李华
网站建设 2026/4/15 12:02:56

HoRain云--HTTP方法大全:从GET到DELETE全解析

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华
网站建设 2026/4/15 11:58:48

HoRain云--JSON对象解析与应用全指南

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华