news 2026/9/3 1:43:29

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/9/3 0:00:42

计算机毕设java学术团队资源管理系统 基于Java的学术团队资源管理平台设计与实现 Java环境下学术团队资源管理系统的研究与开发

计算机毕设java学术团队资源管理系统360369&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着信息技术的飞速发展&#xff0c;学术团队的管理方式也在不断革新。传统的纸质化管…

作者头像 李华
网站建设 2026/9/2 20:38:34

好写作AI:基于深度学习的研究问题自动提炼与论证框架构建

引言&#xff1a;从“选题焦虑”到“问题明晰”的跨越“不知道研究什么&#xff1f;”——这是大学生开题阶段最普遍的困惑。传统论文写作中&#xff0c;研究问题的提出往往依赖于个人有限的阅读积累与导师经验&#xff0c;过程耗时且充满不确定性。好写作AI最新推出的深度学习…

作者头像 李华
网站建设 2026/9/2 21:37:26

HoRain云--递归解析JSON的终极指南

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

作者头像 李华
网站建设 2026/9/2 16:05:10

当PECVD与半导体3D动画相遇:解锁等离子增强化学气相沉积的视觉魅力

在半导体制造领域&#xff0c;PECVD&#xff08;等离子增强化学气相沉积&#xff09;技术因其独特的优势而被广泛应用。作为一种精确控制的沉积技术&#xff0c;PECVD通过在低温条件下利用等离子体来促进化学反应&#xff0c;实现薄膜材料的沉积。此过程涉及多个技术参数的精确…

作者头像 李华
网站建设 2026/9/2 20:42:07

【读书笔记】《高效演讲》

《高效演讲》&#xff1a;从恐惧到自如的实战指南 一、演讲的本质认知 1.1 演讲恐惧的生理机制 演讲紧张源于人类的"动物精神"。在原始社会&#xff0c;当你面前突然出现很多双眼睛盯着你时&#xff0c;意味着遭遇狼群等危险。此时人体会启动"战或逃"(Figh…

作者头像 李华
网站建设 2026/8/25 23:58:43

2026必备!自考论文难?TOP9 AI论文网站深度测评

2026必备&#xff01;自考论文难&#xff1f;TOP9 AI论文网站深度测评 2026年自考论文写作工具测评&#xff1a;为何需要一份权威榜单&#xff1f; 随着自考人数逐年增长&#xff0c;论文写作成为众多考生面临的“拦路虎”。从选题构思到文献检索&#xff0c;再到格式排版与内…

作者头像 李华