Mybatis多条件查询:Map传参与对象传参解析

Mybatis 多条件查询常见且关键,本文探讨两种方法——Map 传参和 Java Bean 对象传参,展示用法及区别,总结应用场景和优缺点。

在这里插入图片描述

1. Map传参方式

原理:Mybatis允许我们通过一个Map对象来传递动态SQL中的参数。Map的键对应于SQL语句中占位符的名称,值则是实际的参数值。

代码示例

Mybatis全局配置文件示例片段。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 数据源配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><!-- 映射器配置,可以自动扫描包中的Mapper接口 --><mappers><package name="com.example.dao.mapper"/><!-- 或者单独指定Mapper XML文件 --><!-- <mapper resource="com/example/dao/mapper/UserMapper.xml"/> --></mappers>
</configuration>

根据 Map 键值对生成 SQL 条件,实现多条件动态查询。

// DAO层方法定义
public List<User> findUsers(Map<String, Object> params);// Service层调用
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 25);
List<User> users = userDao.findUsers(params);// Mapper.xml配置
<select id="findUsers" resultType="com.example.User">SELECT * FROM user <where><if test="name != null">name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>

2. 对象传参方式

原理:另一种方式是直接使用Java Bean对象作为参数传递给Mapper接口方法。Mybatis会自动将对象的属性名映射为SQL中的参数名。

代码示例

创建 UserQueryParams 类封装查询条件,传递给 Mapper 方法,Mybatis 自动处理对象属性到 SQL 参数映射。

// 定义一个用于传递查询条件的Java Bean
public class UserQueryParams {private String name;private Integer age;// ... getters and setters
}// DAO层方法定义
public List<User> findUsers(UserQueryParams queryParams);// Service层调用
UserQueryParams queryParams = new UserQueryParams();
queryParams.setName("John");
queryParams.setAge(25);
List<User> users = userDao.findUsers(queryParams);// Mapper.xml配置
<select id="findUsers" resultType="com.example.User">SELECT * FROM user <where><if test="queryParams.name != null">name = #{queryParams.name}</if><if test="queryParams.age != null">AND age = #{queryParams.age}</if></where>
</select>

3. 区别总结

Map 传参:灵活,无需定义 Java Bean,适用于临时或多变查询条件。

对象传参:结构清晰,可读性强,适用于固定、复杂查询条件组合,借助 IDE 自动补全提高开发效率,便于维护扩展,适用于有预定义模型的业务场景,如用户搜索界面多种筛选条件对应 Java Bean 属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wangEditor富文本编辑器,Laravel上传图片配置和使用

文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器&#xff0c;使用的是VUE3.0版本所以很多不兼容&#xff0c;实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…

three.js+WebGL踩坑经验合集(2):3D场景被相机裁切后,被裁切的部分依然可以被鼠标碰撞检测得到(射线检测)

three.js内置了Raycaster类实现鼠标的碰撞检测&#xff0c;用它可以实现3D物体的鼠标点击&#xff0c;移入移出&#xff0c;触屏检测一类的业务功能。 该功能虽然强大&#xff0c;但同事们普遍反映不是那么好用&#xff0c;因为它不像其它配套了可视编辑的3D引擎一样&#xff…

Spring Boot spring.factories文件详细说明

优质博文&#xff1a;IT-BLOG-CN 前言&#xff1a;经常看到 spring.factories 文件&#xff0c;却没有对它进行深入的了解和分析&#xff0c;今天我们就一起揭开面纱看看它的内在。 spring.factories 文件是 Spring Boot 自动配置机制的核心部分之一。它位于每个 Spring Boo…

从前端视角看设计模式之行为型模式篇

上篇我们介绍了 设计模式之结构型模式篇&#xff0c;接下来介绍设计模式之行为型模式篇 责任链模式 责任链模式允许将请求沿着一条链传递&#xff0c;直到有一个对象处理它为止。每个处理者都有机会处理该请求&#xff0c;或者将其传递给链中的下一个处理者&#xff0c;每个处…

[2025分类时序异常检测指标R-AUC与VUS]

梳理了一下分类中常见的指标&#xff0c;这些指标与时序异常检测中新提出的A-RUC与VUS之间的关系 真正例(True Positive,TP): 被正确识别为正样本的数量。真负例(True Negative,TN): 被正确识别为负样本的数量。假正例(False Positive ,FP): 被错误识为正样本数量假负例(Fals…

Unity中实现伤害跳字效果(简单好抄)

第一步骤安装并导入Dotween插件&#xff08;也可以不用导入之后直接下载我的安装包&#xff09; 官网DOTween - 下载 第二步&#xff1a; 制作跳字预制体 建议把最佳适应打开&#xff0c;这样就不怕数字太大显示不全了。 第三步&#xff1a;创建一个空对象并编写脚本JumpNumbe…

考研机试:学分绩点

描述 北京大学对本科生的成绩施行平均学分绩点制&#xff08;GPA&#xff09;。 既将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。 公式如下&#xff1a; 一门课程的学分绩点 该课绩点 该课学分 总评绩点 所有学科学分绩点之和 / 所有课程学分之和 …

【玩转全栈】----YOLO8训练自己的模型并应用

继上篇&#xff1a; 【玩转全栈】---基于YOLO8的图片、视频目标检测-CSDN博客 相信大家已经可以训练一些图片和视频了&#xff0c;接下来我将为大家介绍如何训练自己的特定模型&#xff0c;并用其进行检测 目录 准备数据 图片数据 标识数据 配置文件 运行 测试训练结果 存在的问…

OpenCV文字绘制支持中文显示

OpenCV版本&#xff1a;4.4 IDE&#xff1a;VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示&#xff0c;网上很多方法推荐的都是使用FreeType来支持&#xff0c;FreeType是什么呢&#xff1f;FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…

我谈《概率论与数理统计》的知识体系

学习《概率论与数理统计》二十多年后&#xff0c;在廖老师的指导下&#xff0c;才厘清了各章之间的关系。首先&#xff0c;这是两个学科综合的一门课程&#xff0c;这一门课程中还有术语冲突的问题。这一门课程一条线两个分支&#xff0c;脉络很清晰。 概率论与统计学 概率论…

ElasticSearch JavaRestClient查询之快速入门

文章目录 查询操作流程概述构建并发起请求1. 创建请求对象2. 设置请求体3. 发送请求 查询结果的解析1. 解析结果结构2. 获取总条数3. 获取命中的数据 完整示例代码总结 查询操作流程概述 Elasticsearch 查询操作大致可以分为两个部分&#xff1a; 构建并发起请求&#xff1a;…

Quartus:开发使用及 Tips 总结

Quartus是Altera&#xff08;现已被Intel收购&#xff09;推出的一款针对其FPGA产品的综合性开发环境&#xff0c;用于设计、仿真和调试数字电路。以下是使用Quartus的一些总结和技巧(Tips)&#xff0c;帮助更高效地进行FPGA项目开发&#xff1a; 这里写目录标题 使用总结TIPS…

elementUI Table组件实现表头吸顶效果

需求描述 当 table 内容过多的时候&#xff0c;页面上滑滚动&#xff0c;表头的信息也会随着被遮挡&#xff0c;无法将表头信息和表格内容对应起来&#xff0c;需要进行表头吸顶 开始编码&#x1f4aa; 环境&#xff1a;vue2.6、element UI step1&#xff1a; 给el-table__h…

用于牙科的多任务视频增强

Multi-task Video Enhancement for Dental Interventions 2022 miccai Abstract 微型照相机牢牢地固定在牙科手机上&#xff0c;这样牙医就可以持续地监测保守牙科手术的进展情况。但视频辅助牙科干预中的视频增强减轻了低光、噪音、模糊和相机握手等降低视觉舒适度的问题。…

Vue3轮播图左右联动

1、轮播图部分&#xff0c;右边鼠标移入&#xff0c;左边对应展示轮播图 可以在swiper 官网 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 选择vue中使用swiper npm i swiper 左右两边的联动&#xff1a;左边的轮播图和右边的小的列表他们的列表组成结构是一样的&#…

windows下本地部署安装hadoop+scala+spark-【不需要虚拟机】

注意版本依赖【本实验版本如下】 Hadoop 3.1.1 spark 2.3.2 scala 2.11 1.依赖环境 1.1 java 安装java并配置环境变量【如果未安装搜索其他教程】 环境验证如下&#xff1a; C:\Users\wangning>java -version java version "1.8.0_261" Java(TM) SE Runti…

go-zero框架基本配置和错误码封装

文章目录 加载配置信息配置 env加载.env文件配置servicecontext 查询数据生成model文件执行查询操作 错误码封装配置拦截器错误码封装 接上一篇&#xff1a;《go-zero框架快速入门》 加载配置信息 配置 env 在项目根目录下新增 .env 文件&#xff0c;可以配置当前读取哪个环…

2025 最新flutter面试总结

目录 1.Dart是值传递还是引用传递&#xff1f; 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别&#xff1f; 4.简述Dart语音特性 5. Navigator 是什么&#xff1f;在 Flutter 中 Routes 是什么&#xff1f; 6、Dart 是不是…

HarmonyOS Next构建工具 lycium 原理介绍

HarmonyOS Next构建工具 lycium 原理介绍 背景介绍 HarmonyOS Next中很多系统API是以C接口提供&#xff0c;如果要使用C接口&#xff0c;必须要使用NAPI在ArkTS与C间交互&#xff0c;这种场景在使用DevEco-Studio中集成的交叉编译工具&#xff0c;以及cmake构建工具就完全够用…

【远程视频必备】Briefing:安全视频群聊让远程办公无忧

文章目录 前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址 前言 对于有远程办公或者身处异地与家人好友视频聊天需求的人来说&#xff0c;在享受高效沟通的同时&#xff0c;也或多或少会有对信息泄…