当前位置: 首页 > 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.lryc.cn/news/576894.html

相关文章:

  • Linux系统移植15:Linux内核编译
  • 数据挖掘、机器学习与人工智能:概念辨析与应用边界
  • Ubuntu服务器(公网)- Ubuntu客户端(内网)的FRP内网穿透配置教程
  • 通达信【MACD趋势增强系统】幅图(含支撑压力位)
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • WebRTC系列:(一)MacOS开发环境搭建(Vscode + Clangd)
  • 【Linux手册】进程等待:必要性剖析与wait、waitpid等多种方式实操指南
  • 循环神经网络的概念和案例
  • JavaScript中的Class类
  • mac触摸板设置右键
  • BULL价值计算评估
  • vue2 第三节 计算属性_侦听器 watch_生命周期
  • MediaPipe框架解析(一):bazel构建
  • Django ORM 2. 模型(Model)操作
  • 申论审题训练
  • AI智能体|扣子(Coze)搭建【沉浸式历史故事解说视频】工作流
  • 《从Backprop到Diffusion:深度学习的算法进化树全景图》
  • 深入拆解消息队列的存储
  • 信息安全与网络安全---引言
  • <STC32G12K128入门第二十二步>STC32G驱动DS18B20(含代码)
  • Npcap与Pcap4J
  • 学习记录:DAY35
  • vite | vite-plugin-dts 插件生成类型文件 的安装和使用
  • Python爬虫实战:研究untangle库相关技术
  • MYSQL的基础信息如何存放
  • PL-SLAM: Real-Time Monocular Visual SLAM with Points and Lines
  • 实战四:基于PyTorch实现猫狗分类的web应用【2/3】
  • Rust函数与所有权
  • Webpack中的Loader详解
  • SpringBoot医疗用品销售网站源码