当前位置: 首页 > 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名,适合参数不定或动态场景。

相关文章:

  • Vue 3 Teleport 特性
  • [Python] -基础篇3-掌握Python中的条件语句与循环
  • UE5 Grid3D 学习笔记
  • 低延时高速数据链技术在无人平台(无人机无人船无人车)中的关键作用与应用
  • Android大图加载优化:BitmapRegionDecoder深度解析与实战
  • 认知智能平台搭载LLM+RAG,重构行业洞察与决策支持体系!
  • 零基础学习RabbitMQ(5)--工作模式(1)
  • Elasticsearch 索引设计与性能优化实战指南
  • Docker 入门教程(八):Dockerfile
  • MyBatis CRUD 常用动态 SQL 标签整理
  • ​19.自动补全功能
  • Swift 小技巧:用单边区间优雅处理模糊范围
  • 杨洋出席喜临门Ai净眠智能新品发布会 今夜无人失眠
  • 基于Java+Springboot的宠物健康咨询系统
  • tmux-copy mode相关配置文件
  • 小米路由器 AX3000T自定义子网掩码
  • rollupOptions 详细讲解,如何优化性能
  • 07-Seq2Seq英译法案例
  • 模运算优化
  • 用R包mice进行多重插补