当前位置: 首页 > news >正文

Mybatis多条件查询设置参数的三种方法

1. 散装参数(@Param注解)

定义:

当Mapper接口方法有多个参数时,每个参数单独列出,需要用@Param("参数名")注解来指定参数在SQL中的占位符名称。

List<Brand> selectByConditon(@Param("status") int status,@Param("companyName") String companyName,@Param("brandName") String brandName);

详细解释

  • 这种方式是每个参数单独列出,每个参数前都加上@Param("参数名")注解。
  • @Param("参数名")的作用是:告诉MyBatis,SQL语句中用到的#{参数名},要和方法参数绑定。
  • 这样写的好处是,参数名和SQL语句中的占位符可以完全自定义,不受Java变量名限制。

SQL映射文件写法

   <resultMap id="brandResultMap" type="com.itheima.pojo.Brand"><result column="brand_name" property="brandName"/><result column="company_name" property="companyName"/></resultMap><select id="selectByCondition" resultMap="brandResultMap">select * from tb_brandwhere status=#{status}and company_name like #{companyName}and brand_name like #{brandName}</select>
  • 这里的#{status}、#{companyName}、#{brandName},会自动用方法参数的值替换。

适用场景

  • 参数个数较少,参数名明确。
  • 你希望SQL参数名和Java变量名不一致时。

代码调用示例

//接收参数int status=1;String companyName="华为";String brandName="华为";
List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);

2. 实体类参数

方法签名

List<Brand> selectByCondition(Brand brand);

详细解释

  • 这种方式是把所有参数封装到一个Java对象(实体类)里,方法只接收一个对象参数。
  • SQL语句中用#{属性名},MyBatis会自动从brand对象中取对应属性的值。
  • 这种方式代码更简洁,参数多时更方便,也便于扩展。

SQL映射文件写法

   <resultMap id="brandResultMap" type="com.itheima.pojo.Brand"><result column="brand_name" property="brandName"/><result column="company_name" property="companyName"/></resultMap><select id="selectByCondition" resultMap="brandResultMap">select * from tb_brandwhere status=#{status}and company_name like #{companyName}and brand_name like #{brandName}</select>
  • 这里的#{status}等,MyBatis会自动理解为brand.status、brand.companyName、brand.brandName。

适用场景

  • 参数较多,且参数之间有逻辑关系。
  • 直接用实体类对象传递更方便,代码更整洁。

代码调用示例

Brand brand = new Brand();
brand.setStatus(1);
brand.setCompanyName("华为");
brand.setBrandName("荣耀");
List<Brand> list = mapper.selectByCondition(brand);

3. Map参数

方法签名

List<Brand> selectByCondition(Map map);

 

详细解释

  • 这种方式是把所有参数放到一个Map集合里,key为参数名,value为参数值。
  • SQL语句中用#{key},MyBatis会自动从map中取key对应的值。
  • 这种方式参数个数可以动态变化,适合参数不确定或运行时动态决定的场景。

SQL映射文件写法

   <resultMap id="brandResultMap" type="com.itheima.pojo.Brand"><result column="brand_name" property="brandName"/><result column="company_name" property="companyName"/></resultMap><select id="selectByCondition" resultMap="brandResultMap">select * from tb_brandwhere status=#{status}and company_name like #{companyName}and brand_name like #{brandName}</select>
  • 这里的#{status}等,MyBatis会自动从map中取key为status、companyName、brandName的值。

适用场景

  • 参数个数不确定,或者参数名在运行时动态决定。
  • 适合通用查询、批量操作等场景

代码调用示例

Map map=new HashMap();map.put("status",status);map.put("companyName",companyName);map.put("brandName",brandName);List<Brand> brands = brandMapper.selectByCondition(map);
System.out.println(brands);

重点记忆

  • 散装参数:每个参数单独列出,@Param注解绑定SQL参数名,适合参数少且明确。
  • 实体类参数:所有参数封装到一个对象,SQL用属性名,适合参数多且有逻辑关系。
  • Map参数:所有参数放到Map集合,SQL用key名,适合参数不定或动态场景。
http://www.lqws.cn/news/566659.html

相关文章:

  • stm32hal模块驱动(1)hpdl1414驱动
  • Vue的watch函数实现
  • 华为云 Flexus+DeepSeek 征文|华为云 Flexus 云服务 Dify-LLM 平台深度部署指南:从基础搭建到高可用实践
  • 智能制造——解读西门子数字化工厂规划报告(三年实施计划)【附全文阅读】
  • 机器学习在智能供应链中的应用:需求预测与库存优化
  • 大事件项目记录12-文章管理接口开发-总
  • 设计模式之适配器模式
  • OpenCV读取照片和可视化详解和代码示例
  • MySQL 安装使用教程
  • Java垃圾收集机制Test
  • PL-SLAM: Real-Time Monocular Visual SLAM with Points and Lines
  • Ai工具分享(2):Vscode+Cline无限免费的使用教程
  • XWPFDocument导出word文件
  • Linux中《动/静态库原理》
  • Redis缓存击穿深度解析:从现象到实战的完整解决方案
  • github上传代码步骤(http)
  • Cesium快速入门到精通系列教程十二:Cesium1.74中环绕地球生成​​经线环​​
  • Javaweb - 7 xml
  • 【智能协同云图库】智能协同云图库第三弹:基于腾讯云 COS 对象存储—开发图片模块
  • 日常 AI 工具汇总
  • Oracle 递归 + Decode + 分组函数实现复杂树形统计进阶(第二课)
  • 深入剖析 Linux 内核网络核心:sock.c 源码解析
  • 阿里云ACP-数据湖和机器学习
  • 解锁Ubuntu安装:从新手到高手的通关秘籍
  • Java 大视界 -- 基于 Java 的大数据分布式存储在科研大数据归档与长期保存中的应用(328)
  • 从UI设计到数字孪生实战演练:打造智慧交通的综合管理平台
  • 鸿蒙 Swiper 组件解析:轮播交互与动画效果全指南
  • 基于STM32的数字频率计设计
  • LoRA训练-理论基础
  • 大模型在恶性心律失常预测及治疗方案制定中的应用研究