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

根据参数查询

<!--    根据参数查询--><select id="listByMap" resultMap="ResultMapManage" parameterType="map">select <include refid="Manage_field"/>from manage where 1=1<include refid="Manage_where"/></select>

整体含义

这段代码的目的是:根据一个 Map 对象中提供的键值对作为条件,动态地查询 manage 表中的记录。 查询结果会通过之前定义的 ResultMapManage 映射规则,被转换为 Manage 实体对象的集合。


代码逐层解析

1. <select> 标签

<select id="listByMap" resultMap="ResultMapManage" parameterType="map">
  • id="listByMap":这个 SQL 片段的唯一标识符。在对应的 Mapper 接口中,会有一个同名的方法:

     
    public interface ManageMapper {List<Manage> listByMap(Map<String, Object> map);
    }
  • resultMap="ResultMapManage":指定查询结果的映射规则。这里引用了一个名为 ResultMapManage 的 <resultMap>(在你之前的代码中叫 ResultMapMange,注意拼写可能不同)。它负责将查询到的数据库字段映射到 Manage 对象的属性上。

  • parameterType="map"这是关键所在。它指定传入参数的类型是 MyBatis 内置的 map 别名,对应 Java 中的 java.util.Map<String, Object> 接口(通常是 HashMap 实现)。这意味着方法接收一个 Map 对象作为查询条件。

2. SQL 主体

sql
select <include refid="Manage_field"/>from manage where 1=1
<include refid="Manage_where"/>
  • select <include refid="Manage_field"/> from manage:查询 manage 表。<include refid="Manage_field"/> 会被替换为之前定义好的字段列表(如 id, userName, passWord, realName),避免了手动书写和保证一致性。

  • where 1=1:和删除语句中一样,这是一个“万能”的起始条件,目的是为了后面能安全地拼接 AND 条件,避免语法错误。

  • <include refid="Manage_where"/>这是实现动态查询的核心。它引入了一个动态 SQL 片段。

3. 关键的 Manage_where 动态片段(推测内容)

虽然你没有提供 Manage_where 的具体定义,但根据 MyBatis 的常规用法,它几乎肯定包含了 <if> 标签,并且其 test 属性中的判断条件是基于 Map 的键

一个典型的、与 parameterType="map" 配合的 Manage_where 片段会是这样:

xml
<sql id="Manage_where"><if test="id != null">AND id = #{id}</if><if test="userName != null">AND user_name = #{userName}</if><if test="realName != null">AND real_name = #{realName}</if><!-- 可以根据需要继续添加其他字段的条件 -->
</sql>

请注意这里的关键变化:

  • 当 parameterType 是实体类(如 Manage)时,test 中判断的是实体类的属性:test="userName != null"(检查 manage.getUserName())。

  • 当 parameterType 是 map 时,test 中判断的是 Map 中的 Keytest="userName != null"(检查 map.containsKey("userName") && map.get("userName") != null)。


工作流程与示例

假设调用:

java
// 1. 创建一个条件 Map
Map<String, Object> conditionMap = new HashMap<>();
conditionMap.put("userName", "admin"); // 要查询用户名为 'admin' 的记录
conditionMap.put("realName", "张");     // 并且真实姓名包含 '张'// 2. 调用方法
List<Manage> manageList = manageMapper.listByMap(conditionMap);

MyBatis 的处理过程:

  1. 接收到参数 conditionMap,里面有两个键值对:{"userName": "admin", "realName": "张"}

  2. 开始构建 SQL:select id, userName, passWord, realName from manage where 1=1

  3. 处理 <include refid="Manage_where"/>

    • test="id != null":检查 conditionMap 是否有 key 为 "id" 且值不为 null 的项。没有,所以忽略。

    • test="userName != null":检查 conditionMap 是否有 key 为 "userName" 且值不为 null 的项。,值为 "admin",所以追加 AND user_name = #{userName}

    • test="realName != null":检查 conditionMap 是否有 key 为 "realName" 且值不为 null 的项。,值为 "张",所以追加 AND real_name = #{realName}

  4. 最终生成的 SQL

    sql
    SELECT id, userName, passWord, realName 
    FROM manage 
    WHERE 1=1 
    AND user_name = ? 
    AND real_name = ?

    ? 占位符会被替换为 "admin" 和 "张"

  5. 执行查询,并将结果集通过 ResultMapManage 映射成 List<Manage> 返回。

优势与用途

  1. 极致的灵活性:调用者可以传递任意数量、任意组合的查询条件。你可以根据 id 查,也可以根据 userName 和 realName 组合查,甚至可以传入完全不同的条件(比如 status),只需在 Map 里放入相应的键值对并在 Manage_where 片段中配置好对应的 <if> 标签即可。

  2. 避免编写大量类似方法:如果没有这个通用方法,你可能需要为每一种查询组合都写一个单独的方法(如 listByIdlistByUserNamelistByUserNameAndRealName),非常冗余。

  3. 适用于高级查询功能:这种模式非常常用于后台管理系统的高级搜索/筛选功能,用户在前端选择不同的字段输入不同的值,后端将这些条件收集到一个 Map 里,然后直接调用这个通用的 listByMap 方法。

总结: 这段代码定义了一个通用的、基于 Map 条件动态查询的方法。它利用 MyBatis 的动态 SQL 能力,根据传入 Map 中包含的键值对,智能地生成带有相应 WHERE 条件的查询语句,是实现灵活查询的经典模式。

相关文章:

根据参数查询

根据参数查询<!-- 根据参数查询--><select id="listByMap" resultMap="ResultMapManage" parameterType="map">select <include refid="Manage_field"/>from manage where 1=1<include refid="Manage_wh…...

关于非侵入式脑机接口面向C端一个应用想法

目前,脑机接口行业发展如火如荼,但应用仍高度集中在医疗领域,比如运动功能康复等。这类方向不仅技术相对成熟,也更易获得商业回报——毕竟无论是医院还是患者,都更愿意为“恢复健康”买单。然而,若希望脑机接口能像汽车、手机那样,真正融入普通人的日常生活,成为不可或…...

Blelloch并行扫描算法

本文介绍了一个可以用于并行化串行累计操作的Blelloch算法,可以通过用空间换时间+并行计算的方法,来降低特定计算的时间复杂度。这里我们给出了算法原理的大致介绍,以及基于Numpy的算法代码实现。技术背景 由于现代计算机技术的发展,算法的并行能力越来越强大。所以当我们考…...

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型 在数字化转型浪潮中,中国企业的软件研发模式正经历深刻变革。随着信创战略的深入推进,构建自主可控的DevOps工具链已成为各行业技术负责人的核心任务。作为国内领先的代码托管平台,Gitee正通过其本土化优势与开放性生态,…...

【IEEE出版】2025年电气、控制与人工智能国际学术会议(ICOECAI 2025)

2025年电气、控制与人工智能国际学术会议(ICOECAI 2025) 2025 International Conference on Electrical, Control and Artificial Intelligence 在这里看会议官网详情 2025年10月24-26日 中国广州 截稿时间:见官网 接受/拒稿通知:投稿后5天内 收录检索:IEEE Xplore、EI …...

采购计划 vs 物料需求计划(MRP),采购新手最容易搞混的两份“清单”!

很多采购新手一上手就懵了:手里同时有两份计划一个叫“采购计划” 一个叫“MRP(物料需求计划)”你一看,都是要买东西啊,干嘛分两份?https://s.fanruan.com/m15ta 很多企业常常把这两份清单混为一谈,结果掉进坑里——采购超预算、缺料、库存积压……问题全来了。 今天,我…...

P10299 [CCC 2024 S5] Chocolate Bar Partition

题目传送门DP、状态设计优化。题意 将一个 \(2 \times N(N \le 2\times 10^5)\) 的矩阵分为尽可能多的联通块,使得每个联通块中的数的平均值都相等,求最多可以将矩阵分为多少个联通块。 题解 显然是 DP,并且复杂度要在 \(O(N \log N)\) 或者 \(O(N)\)。 平均值相等很难维护,…...

实用指南:企业实施数字化转型时常见的挑战

实用指南:企业实施数字化转型时常见的挑战pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

当ARMxy+AI边缘计算落地水泵行业就碰撞出怎样的火花?

水泵,这个看似再普通不过的设备,正在城市供水、楼宇二次供水、农业灌溉、工业循环水等场景里默默运行。它们是“水的搬运工”,也是能耗大户、运维难点。然而,在 数字化浪潮下,水泵行业也开始面临三个迫切问题:能耗高:传统 PID 调节方式,难以精准匹配用水曲线;运维难:…...

QN8035 FM芯片驱动开发

一、驱动开发基础配置 1.1 硬件接口配置通信协议:标准I2C接口(设备地址:写0x20/读0x21) 关键引脚: SDA/SCL:I2C数据线(需接4.7kΩ上拉电阻) XTAL_IN/XTAL_OUT:外部晶振输入(支持16MHz/24MHz) RDS_IN:RDS数据输入(需连接解码芯片)1.2 寄存器配置要点 #define QN80…...

再见 Claude Code,我选择了 Codex!真香!!

大家好,我是R哥。 最近,我放弃 Claude Code 了,选择了 CodeX,真香! 为什么放弃 Claude Code? 第一,是因为 Claude 全面封禁了中国控股公司使用,让我很不爽。推荐阅读:真行!Claude 全面封禁中国。。 第二,我用不惯 Claude,我一直用的 ChatGPT,为了使用 Claude Code…...

2025中国DevOps工具生态全景:本土化突围与智能化跃迁

2025中国DevOps工具生态全景:本土化突围与智能化跃迁 在全球数字化转型浪潮席卷之下,DevOps工具市场正以年复合增长率24%的速度扩张。中国信通院最新数据显示,2023年国内DevOps平台市场规模达58亿元,其中本土解决方案占比首次突破40%。这场由自动化向智能化的产业升级中,工…...

字符串转 python 对象 eval

s = [ { label: "苹果", value: "origin_event_data", icon: "icon-a", color: "#409EFF", bgColor: "#ECF5FF", borderColor: "#D9ECFF", }, { label: "橘子…...

蛋白多序列比对美化

1、用snapgene进行多序列比对,导出alin文件 2、用python进行多序列比对美化点击查看代码 from Bio import AlignIO import os# ====== 用户参数 ====== alignment_file = "比对.fa" # 输入比对文件(fasta/clustal) alignment_format = "fasta" html_…...

Gitee推出Remote mcp-gitee:云端MCP服务开启智能协作新时代

Gitee推出Remote mcp-gitee:云端MCP服务开启智能协作新时代 中国领先的代码托管平台Gitee近日正式发布Remote mcp-gitee服务,这项基于云端的MCP Server解决方案将彻底改变开发团队的协作方式。作为三月发布的本地版MCP Server的云端升级版本,Remote mcp-gitee无需复杂部署即…...

Gitee DevOps平台:驱动中国企业数字化转型的核心引擎

​# Gitee DevOps平台:驱动中国企业数字化转型的核心引擎 在全球数字化浪潮席卷的今天,软件开发与运维的效率直接决定了企业的市场竞争力。作为国内领先的一站式DevOps平台,Gitee通过其本土化优势和技术创新能力,正在帮助数千家企业实现研发效能的显著提升,成为中国企业数…...

10 类多布局扫描图像数据集:支撑 OCR 精度提升与 VLM 微调,覆盖广告 / 简历 / 论文等场景的计算机视觉训练数据

一、引言与背景 在人工智能与计算机视觉技术深度融合的当下,光学字符识别(OCR)与视觉语言模型(VLM)已成为文档智能处理领域的核心支撑技术,广泛应用于金融票据识别、企业文档管理、学术数据挖掘等诸多场景。然而,现有模型在面对真实世界中多样的文档类型、复杂的排版布局…...

国产化Excel开发组件Spire.XLS教程:C# 轻松将 DataSet 导出到 Excel

在 C# 开发中,DataSet 常用于管理内存中的数据,通常来源于数据库查询或系统集成过程。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中导出 DataSet 到 Excel,包括创建 Excel 文件、将多个 DataTable 分别写入不同工作表、应用格式化,以及处理大数据量导出等场景。在 C# 开…...

Mysql:Docker的Mysql容器加载Levenshtein 距离算法脚本,实现“相似度匹配”

前言MySQL自带的Like函数是“包含匹配”,即查询目标需要包含指定条件字符才会匹配到;而“相似度匹配”是匹配目标与条件字符是否相似,例如:“这是北京大学”与 “北大”就会有相似度,这样就会查出这类数据信息,只不过它的相似度分数值比较低而已。为了实现这个“相似度匹…...

树链剖分

树链剖分介绍 树链剖分是什么?主要用来处理什么问题 树链剖分(Heavy-Light Decomposition, HLD)。1. 树链剖分的定义 树链剖分是一种 把树分解成若干条链 的算法技巧。 在一棵树上,我们把每个节点的“重儿子”挑出来(通常是子树规模最大的儿子),把它和父亲连成 重边,其…...

【2025-09-17】慢慢得到

20:00人的一切都应该是美的,无论面孔,还是衣裳、心灵或思想。——契诃夫连续两天都没能送孩子上学,因为约了客户都是早上9点半开会,所以必须得提前出门。提前的时间刚好碰上何太的上班时间,然后就一起出门了。考虑到在客户现场停车不方使,于是就赠何太的车去到市区再打车…...

Excel处理控件Aspose.Cells教程:如何使用Python在Excel中创建下拉列表

Excel 中的下拉列表是数据验证最实用的功能之一。在本教程中,我们将向您展示如何借助Aspose.Cells使用 Python 在 Excel 中创建下拉列表。Excel 中的下拉列表是数据验证最实用的功能之一。它允许您将用户输入限制为预定义的选项,减少错误并保持数据输入的一致性。无论您将其称…...

STM32的电子钟功能实现

一、系统架构设计 1.1 硬件组成框图 graph TD A[STM32F103C8T6] --> B[OLED0.96] A --> C[按键矩阵] A --> D[蜂鸣器] B --> I2C总线 C --> EXTI中断 1.2 核心模块划分时间管理:SysTick定时器中断(1ms精度) 显示驱动:SSD1306 OLED中文显示 用户交互:4x4矩阵…...

kylin V11安装mysql8.0.41(glibc2.28)

环境:OS:kylin V11mysql:8.0.41 glibc2.28查看系统glibc版本[root@localhost soft]# ldd --versionldd (GNU libc) 2.38Copyright (C) 2023 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for…...

__cpuid

__cpuid 是一个内联汇编函数,用于在 C 和 C++ 代码中获取有关 CPU 信息的指令集扩展。 这条指令利用了 x86 和 x86_64 处理器的 CPUID 指令,通过查询处理器支持的功能、型号、 制造商等硬件信息,为开发者提供了对 CPU 的低层访问。 /* x86-64 uses %rbx as the base registe…...

Gitee崛起:国产代码托管平台如何重塑企业研发效能新格局

Gitee崛起:国产代码托管平台如何重塑企业研发效能新格局 在全球数字化转型浪潮下,代码托管平台已从单纯的版本控制工具进化为企业研发效能的核心枢纽。随着国内企业对数据主权、研发自主可控需求的提升,国产代码托管平台正迎来前所未有的发展机遇。在这一背景下,Gitee凭借其…...

字节SQL数据库开发手册

1.前言:SQL在字节跳动数据驱动中的核心地位。2.SQL基础与字节跳动最佳实践。2.1.字节跳动常用SQL语法与规范。2.2.性能优化:高效SQL编写技巧..2.3.窗口函数在复杂分析中的应用。3.SQL在字节跳动核心业务场景的应用..3.1.用户增长分析..3.1.1.案例:用户留存率与活跃度分析..3…...

完整教程:视频上传以及在线播放

完整教程:视频上传以及在线播放pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...

C++ STL 常用算法

C++ 标准模板库(STL)提供了丰富的算法库(定义在 <algorithm> 头文件中),这些算法多为通用函数模板,可配合容器和迭代器高效操作数据。 1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_iffind(begin, end, value):查找第一个等于…...

Gitee:中国开发者生态的成长引擎与数字化转型的加速器

Gitee:中国开发者生态的成长引擎与数字化转型的加速器 在中国软件产业快速发展的今天,Gitee作为本土领先的代码托管与协作开发平台,正以独特的本土化优势和技术创新,成为推动中国开发者生态繁荣的关键力量。从初创团队到大型企业,Gitee提供的全流程开发解决方案正在重新定…...

【IEEE出版|五邑大学主办|连续四年EI检索】第五届电子信息工程与计算机技术国际学术会议(EIECT 2025)

随着科学技术的高速发展,计算机技术革新日新月异,其智能化、网络化使人们的生活更加便捷。而电子信息工程依托计算机技术,将数据等逻辑数字转化为可解读信息,渗入到社会的方方面面,使电子及信息产品不断创新,让电子信息工程具备更广阔的前景,两者的相互结合也必将成为未…...

tightvnc使用记录

用起来感觉还行,主要是支持XP系统,不知道为什么XP系统的好像有bug,远程桌面很不稳定,我遇到的情况是,业务XP系统放在ESXI上的,XP远程桌面经常不稳定,容易遇到一远程就远程画面一闪而过的情况,实测发现进ESXI把XP系统已登录的用户注销,再mstsc远程就没问题了。 由于XP远…...

高科战神全家软件怎么设置

高科战神全家软件的设置方法主要包括安装拨号助手App、蓝牙连接设备以及拨号操作设置,具体步骤可参考以下详细说明。‌1.高科战神全家软件设置步骤‌‌安装拨号助手App‌。通过安卓手机安装高科战神拨号助手App,建议联系(V信2081003456)获取下载链接。‌‌安装完成后,打开Ap…...

简单数论函数求和题目的一些技巧

\(\sigma (xy)\) 相关 结论:\(\sigma_0(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1]\)\(\sigma_1(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1] \frac {xj} i\)\(\sigma_k(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1] (\fr…...

c# grpc

asp.net 程序安装nuget包: Grpc.AspNetCore, Grpc.AspNetCore.Server.Reflection 修改 program 设置:<ItemGroup> <Protobuf Include="**/*.proto" OutputDir="Protos" CompileOutputs="false" GrpcServices="Server" /&…...

win10任务栏频繁卡死、转圈

这一部分是笔者碎碎念,可以直接跳过看下面的解决办法,最近这一段时间,频繁遇到win10任务栏卡死,不断转圈,非常影响工作效率。 心想最近是不是安装了什么软件,是什么软件服务导致的吗,去msconfig禁用了非系统服务后还是这样,又尝试卸载了最近的一部分Windows系统更新,依…...

Typora Markdown 编辑快捷键大全(优化补充版)

Typora Markdown 编辑快捷键大全(优化补充版) 说明 本文档基于历史对话内容整理,补充了使用场景说明、操作细节及实用技巧,覆盖 Typora 中 Markdown 编辑的核心快捷键(Windows/Linux 与 Mac 版本对应),适用于日常文档编辑、笔记整理等场景,可直接保存为 Markdown 文件或…...

第二届数字经济与计算机科学国际学术会议(DECS 2025)

第二届数字经济与计算机科学国际学术会议(DECS 2025) 2025 2nd International Conference on Digital Economy and Computer Science 第二届数字经济与计算机科学国际学术会议(DECS 2025)将于2025年10月17日至10月19日在中国武汉召开。本次会议旨在汇聚来自全球的学者、研究…...

文件摆渡系统案例分享:医院如何构建高效内外网文件交换通道

文件摆渡系统对于医院来说,是尤为重要的一种传输工具,大部分医院都是用网闸做的内外网隔离,文件摆渡系统的核心目的是在保障医疗数据安全的前提下,实现内部业务系统与外部网络之间的高效、合规文件传输。本文中,我们就介绍一家三甲医院的内外网文件摆渡建设案例。建设背景…...

淘天一面

6.请介绍一下线程池的一些核心参数。 7.你说到拒绝策略,请举几个拒绝策略的例子。 8.我看你之前用过ES引擎,请问你怎么理解ES搜索引擎里面的倒排索引和正排索引? 9.一般什么情况下会用正排索引? 10.悲观锁和乐观锁在思想上有什么区别? 11.你之前在线上有没有遇到过内存泄漏…...

利用小波变换对跳频信号进行参数估计

跳频信号是一种扩频通信技术,其载波频率在多个频点之间按照伪随机序列跳变。小波变换因其良好的时频局部化特性,非常适合分析这类非平稳信号。 跳频信号模型 跳频信号可以表示为: \[s(t) = A \exp\left[j(2\pi f_n t + \phi_n)\right], \quad t \in [t_n, t_{n+1}] \]其中:…...

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) - 实践

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…...

编写测试用例技巧

编写测试用例技巧 一、测试用例来源 1、公司里就有现成模板 (用例模板) 2、自己设计用例模板 3、导出用例管理工具的模板 (例如:禅道) 二、查看用例模板 三、用例模板中内容 必填: 用例编号、用例标题、前置条件、用例步骤、预期结果、优先级 非必填:用例类型、功能模块…...

牛客刷题-Day1

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day1 今日题目:\(1001-1005\) 1003 可爱の星空 题目描述 “当你看向她时,有细碎星辰落入你的眼睛,真好。”——小可爱 在一个繁星闪烁的夜晚,卿念和清宇一起躺在郊外…...

TENGJUN防水TYPE-C 16PIN连接器技术解析:从结构设计到认证标准的全面解读 - 实践

TENGJUN防水TYPE-C 16PIN连接器技术解析:从结构设计到认证标准的全面解读 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…...

第三届人工智能与自动化控制国际学术会议(AIAC 2025)

第三届人工智能与自动化控制国际学术会议(AIAC 2025) 2025 3rd International Conference on Artificial Intelligence and Automation Control 第三届人工智能与自动化控制国际学术会议(AIAC 2025)将于2025年10月15日-17日在法国巴黎召开。 随着技术的迅猛发展,人工智能与…...

图纸安全外发平台全解析

内容概要 图纸安全外发平台是一个专为解决企业图纸外发难题而设计的系统。简单来说,图纸安全外发平台是什么?它就是一个集数据加密、访问控制于一体的在线平台,旨在保障设计图纸在传输过程中的安全性。其中,像Ftrans B2B企业间⽂件安全交换系统这样的专业平台,更是以其高效…...

webshell流量 - voasem

菜刀、蚁剑、冰蝎、哥斯拉是常见的webshell管理工具。 在攻防演练中,了解其常见webshell管理工具的流量特征对防守方来说十分重要。常见的webshell也在不断发展以绕过安全设备waf的检测,其流量特征也在不断演变,我们应该与时俱进的进行了解分析。 简单的来说,菜刀和蚁剑采用…...

软件测试分类

(属于软件测试基础知识) (了解) 开发模型: 1.敏捷开发模型: 这是一种新的模型, 前面的几种都是属于传统型。它能适应快速需求变化,交付周期短,轻量级的开发模式。 2.增量开发模式: 项目被划分为一系列的增量,每一个增量都交付整个项目需求中的一部分功能。需求按优先…...

Linux下显卡驱动简单测试

Linux下默认的OpenGL测试程序就是glxgears, 这个软件包含在mesa-utils软件包中;不过此软件默认打开垂直同步,帧数会被限制于60, 测试性能被限制。 所以, 在运行时如下:> vblank_mode =0 glxgears [return] 即可, 然后就可以看到释放的性能。...