【Mybatis】项目开发中模糊查询LIKE的四种实现及注意点

使用Spring Boot和MyBatis Plus实现树形结构查询 通过递归查询和适当的数据模型设计,我们可以轻松地处理树形结构数据,并实现各种操作,如查询、插入、更新和删除。在这个实体类中,我们需要定义与表中字段对应的属性以及相应的getter和setter方法。在本文中,我们将探讨如何使用Spring Boot和MyBatis Plus框架来实现树形结构的查询和操作。在这个接口中,我们可以使用MyBatis Plus提供的通用方法,也可以自定义SQL语句。在这一步中,我们将实现树形结构的查询方法。现在,您可以运行测试方法来验证树形结构查询的实现是否正确。 阅读详情

MySQL的LIKE关键字在开发中经常用到,那么在使用Mybatis的情况下有哪几种方式实现模糊查询呢?

Mybatis中的模糊查询实现

1. 直接传参法——在程序中拼接
  /* 构造查询参数 */
  Map<String, Object> params = new HashMap<>();
  String keyword= new StringBuilder("%").append(parameter).append("%").toString();
  params.put("keyword", keyword);

在mapper映射文件的语句对应的语法则是:

<select id="selectCommodity" parameterType="java.util.Map" resultMap="BaseResultMap">
       SELECT c.sku_id,c.price FROM cps_commodity_info c
       WHERE c.ldelete_flag = 0
       <if test="keyword != null">
           AND c.sku_name LIKE #{keyword}
       </if>
   </select>
2. 利用Mybatis的bind

先附上程序中的实现:

  /* 构造查询参数 */
  Map<String, Object> params = new HashMap<>();
  params.put("keyword", keyword);

再附上mapper映射文件中的SQL语句:

<select id="selectCommodity" parameterType="java.util.Map" resultMap="BaseResultMap">
       <bind name="parameter" value="'%'+keyword+'%'"></bind>
       SELECT c.sku_id,c.price FROM cps_commodity_info c
       WHERE c.ldelete_flag = 0
       <if test="keyword != null">
           AND c.sku_name LIKE #{parameter}
       </if>
   </select>

Tips:
如果报错

Cause: org.xml.sax.SAXParseException;  必须声明元素类型 "bind"`

说明Mybatis版本过低,需要升级版本。

3. 利用MySQL的字段串拼接函数CONCAT:
SELECT c.sku_id,c.price FROM cps_commodity_info c WHERE c.sku_name LIKE CONCAT(CONCAT('%',#{keyword}),'%');

如果采用 concat(a, b, c)直接拼接可能会报“参数个数无效”。

4. 采用${}直接拼接
SELECT c.sku_id,c.price FROM cps_commodity_info c WHERE c.sku_name LIKE '%${keyword}%'; 

注意:由于$ {}是参数直接注入拼接的,所以使用这种写法的时候,在$ {}大括号里面不能注明jdbcType,不然会报错。

该方式笔者极其不推荐,因为有SQL注入的风险。
关于${}和#{}的区别,可以学习博客:

【Mybatis】占位符#{}和${}的区别

注意

有博客写的是利用#{}直接传入解析,示例代码如下:

<select id="selectCommodity" parameterType="java.util.Map" resultMap="BaseResultMap">
       SELECT c.sku_id,c.price FROM cps_commodity_info c
       WHERE c.ldelete_flag = 0
       <if test="keyword != null">
           AND c.sku_name LIKE "%"#{keyword,jdbcType=VARCHAR}"%"
       </if>
   </select>

但其实这种方式是错的,因为Mybatis中的#{}不允许字符串拼接。

mybatis 父子级树形结构查询 针对父子级数据目录查询, 以前都是逐级的去根据父级id查询子集目录, 查出后最后再在代码中拼成树形结构, 相当复杂,我们可以利用 mybatis 提供的 collection 标签自动组织树形结构 立即下载

相关推荐

二进制、八进制、十六进制、十进制转换详解

二进制是计算机的语言,正如我们使用汉语表达与交流信息一样,任何信息在计算机中都以二进制的形式存储和计算。了解二进制与十进制等进制之间的转换方法,有助于我们了解计算机内部的数字计算过程,可以帮助我们在一定程度上理解信息在计算机中的编码和解码过程。本文先简单介绍位置化数字系统的概念,然后详细讲解二进制、八进制、十六进制、十进制之间的转换方法与原理。

2301_81674797的博客 2097

myBatis 模糊查询like拼接

mybatis中模糊查询like拼接问题 <select id="getUsersByFuzzyQuery" parameterType="User" resultType="User"> select <include refid="columns"/> from users <where> <!-- 方法一: 直接使用 % 拼接字符串 --> <if tes

lsj1143956304的博客 1万+

解忧杂货铺(四):Hightec生成HEX方法+小功能开启

Hightec使用的一些常用技能

梦想技术家 2161

Mybatis中Like模糊查询三种处理方式

Mybatis中Like模糊查询三种处理方式1.通过单引号拼接${} 2.通过concat 3.通过拼接#{}。运行结果,测试,代码实现,表结构

. 1万+

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1567

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 248

Mybatis模糊查询Like的三种方式

在实际项目中,我们会经常对数据做一些模糊查询的操作,这时候就需要利用到 `like` 字段,那么在Mybatis中,有哪些方式可以实现模糊查询呢?这里就简单的介绍下:Mybatis模糊查询Like的三种方式,如果对你有帮助,码文不易,请一键三连,万分感谢。

热爱技术,享受生活 3万+

F5 GTM DNS 实战指南:智能DNS的监控与健康检查机制

本文深入解析F5 BIG-IP GTM智能DNS的核心机制,重点阐述其监控与探针两大功能如何协同工作。监控器负责深度检查服务器应用健康,确保服务可用性;探针则实时测量网络路径质量,实现基于延迟的智能流量调度。文章通过实战配置步骤,指导如何构建逻辑架构、建立iQuery通信、配置业务级健康检查及探针,从而构建高可用、高性能的全局负载均衡解决方案。

weixin_29240711的博客 469

Mybatis中Like 的使用方式以及一些注意点

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 模糊查询在项目中还是经常使用的,本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。 使用Springboot简单配置一下Mybatis,然后进行说明。Springboot集成Mybatis这里就不做介绍了。 初始数据 方式一 在Mybatis中的第一种写法: <!--有sq...

阿飞云漫步 9851

《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)

《C++面向对象程序设计》✍千处细节、万字总结 文章目录《C++面向对象程序设计》✍千处细节、万字总结一、面向对象程序设计二、C++基础2.1 C++的产生和特点2.2 一个简单的C++示例程序2.3 C++在非面向对象方面对C语言的扩充输入和输出cinconst修饰符void型指针内联函数带有默认参数值的函数函数重载作用域标识符"::"强制类型转换new和delete运算符引用三、类和对象(一)3.1 类的构成3.2 成员函数的定义3.3 对象的定义和使用3.4 构造函数与析构函数构造函数成员初始化列表

像写诗一样优雅地写代码~ 78万+

LED灯闪烁实验:实验介绍

每个章节都会单独进行验证工作,例如Simulink开发的应用层软件,会在Simulink-TestHarness中进行仿真,通过Scope示波器模块输出0-1交替的结果。CubeIDE集成双方的代码后,会烧写到开发板中验证是否按照定义的时间进行闪烁。ST-LINK V2是STM32开发生态系统中常用的硬件调试接口,能够连接微控制器与开发环境,实现程序的下载、调试和分析。STM32F103C8T6最小系统板是基于STM32F103C8T6微控制器的开发板,本实验会涉及使用板载的连接PC13引脚的LED灯。

u013288925的博客 457

mybatis中LIKE模糊查询的几种写法以及注意点

mybatis中对于使用like来进行模糊查询的几种方式: (1)使用${...} 注意:由于$是参数直接注入的,导致这种写法,大括号里面不能注明jdbcType,不然会报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionExc...

NasubiZW 39万+

历年安徽省省赛AHOI初中组考点分类汇总考点分类汇总

持续更新中.....

weixin_42358969的博客 818

Mybatis模糊查询的四种方式

Mybatis模糊查询的四种方式模糊查询方式方式一方式二方式三(推荐)方式四#{} 与${}对比总结 模糊查询方式 Mybatis提供了模糊查询的方式,对模糊查询like关键字进行一个简单的总结。 方式一 业务场景:根据姓名模糊查询用户; 配置文件 SELECT * FROM user WHERE name LIKE #{name} 测试类/数据 name = ‘%张%’ 分析:在调用处添加%作为模糊匹配通配符。 方式二 方式一的缺点:需要手动输入通配符,不方便 SELECT * FROM user

Mr_Qiao93的博客 8212

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mybatis like模糊查询的几种写法及注意点

本文总结一下在mybatis中模糊查询like的几种写法及注意点。

weixin_49114503的博客 1698

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mybatis 模糊查询 like 语句该怎么写?

在 MyBatis 中,使用like关键字进行模糊查询,可通过在 SQL 语句中使用concat()函数将需要查询的关键词拼接到 SQL 语句中实现。在 MyBatis-Plus 中,使用类构建查询条件,通过调用like方法进行模糊查询,用于获取对应实体的属性并指定查询关键词。总的来说,模糊匹配是 SQL 查询中比较常用的一种方式,MyBatis 和 MyBatis-Plus 都能够很方便地支持模糊查询,具体实现根据项目需要进行选择。

java小白翻身 3512

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring Boot 中Mybatis使用Like的使用方式和注意点

使用Springboot简单配置一下Mybatis,然后进行说明。Springboot集成Mybatis这里就不做介绍了,这里我们主要介绍一下在mybatis配置文件中怎么使用模糊查询。

经历过大厂、小厂风风雨雨的程序佬 2852

快马AI一键生成:MyBatis Like 模糊查询的高效实现

平台的一键部署功能也很方便,生成的项目可以直接部署运行,省去了配置环境的麻烦。我测试了几个模糊查询的场景,包括单字段、多字段组合查询,系统都能正确返回分页结果,响应速度也很理想。只需要描述需求,平台就能生成包含这些功能的完整代码,包括MyBatis的Mapper配置、Service层实现和Controller接口。通过合理的SQL编写和索引设计,配合平台提供的代码生成能力,可以快速构建出高效可靠的模糊查询功能。另外,LIKE查询中的特殊字符需要进行转义处理,可以使用ESCAPE关键字定义转义符。

SilverMoon18的博客 922

MyBatis之Like模糊查询的两种实现方式

MyBatis之Like模糊查询的两种实现方式

yuanjinshenglife的专栏 3461

MySQL 模糊查询:MySQL 数据库 like 语句通配符模糊查询小结

今天在使用 MySQL 语句执行增删改查操作时,控制台报出了以下错误:Parameter index out of range (1 > number of parameters, which is 0)。翻译过来意思就是:查到结果数据为 1,真实值应为 0,参数越界,产生错误。如此也就明确了我们具体出错的地方——参数,即对于通配符"?"的处理。本文分别对执行普通 SQL 语句以及使用 like 语句进行通配符模糊查询遇到本错误进行了剖析,并给出解决方案。

白鹿第一帅的 优快云 博客 8734

like mybatis 用法_Mybatis中Like 的使用方式以及一些注意点

做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!模糊查询在项目中还是经常使用的,本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。使用Springboot简单配置一下Mybatis,然后进行说明。Springboot集成Mybatis这里就不做介绍了。初始数据方式一在Mybatis中的第一种写法:select * from t_user w...

weixin_42298645的博客 1084

Mybatis模糊查询like语句该怎么写?

(2)"%"#{question}"%" 注意:因为#{…}解析成sql语句时候,会在变量外侧自动加单引 号’ ',所以这里 % 需要使用双引号" ",不能使用单引号 ’ ',不然会查不到任何结果。在上面的示例中,select语句使用了like语句来完成模糊查询,使用了%通配符,实现了对用户姓名进行模糊查询。在Mybatis中,模糊查询可以使用like语句,like语句的写法与SQL语句的写法相似。(4)CONCAT(’%’,#{question},’%’) 使用CONCAT()函数,推荐。

架构师之路。。 737

Mybatis第三弹(Mybatis对结果的处理以及模糊查询Like)

文章骨架:1、resultType的用法1) 返回java对象(没有限制,也可以新建一个对象,把结果封装为这个对象)2)如果返回值是需要Java类型(包括简单类型)的值:2、resultMap 结果映射,指定列名和Java对象的属性对应关系3、模糊查询,Like的使用 1、resultType的用法 表示sql语句执行的结果,转为Java对象的类型 1) 返回java对象(没有限制,也可以新建一个对象,把结果封装为这个对象) <select id="selectStudentByMap" resul.

小游子YKY的博客 4695
上一篇: 【并发编程】基础系列(一):线程安全性
下一篇: 【MySQL】深入理解ORDER BY的排序规则及多个字段排序的实现
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值