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

说明

       模糊查询在项目中还是经常使用的,本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。

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

本地表数据

具体方式

  方式一

在Mybatis中的写法:

    <select id="queryLists"  parameterType="java.lang.String" resultMap="BaseResultMap">
        select * from stuinfo
        where 1=1
        <if test="name != null and name != ''">
            AND name like '%${name}%'
        </if>
        order by id desc
    </select>

输出以下语句:

      这种会有sql注入的问题,需要明白在 Mybatis中 $ 和 # 使用的区别。这种写法也不能加jdbcType=VARCHAR,否则也会报错。

注意:种方式在实际开发过程中千万要注意,不要写成这样了。

方式二

     在Mybatis中的写法:

    <select id="queryLists"  parameterType="java.lang.String" resultMap="BaseResultMap">
        select * from stuinfo
        where 1=1
        <if test="name != null and name != ''">
            AND name like #{name,jdbcType=VARCHAR}
        </if>
        order by id desc
    </select>

 在代码中加上%

    @GetMapping("/lists")
    @ResponseBody
    public List<StuInfo> lists(String name){
        return stuInfoService.getLists('%'+name+'%');
    }

输出以下语句:

       这种方式在一些项目中也会看到。如果没有使用如Mybatis等ORM框架,直接写sql查询就这样拼接了。

      第一种方式和第二种方式基本上一致

方式三

 在Mybatis中的写法:

    <select id="queryLists"  parameterType="java.lang.String" resultMap="BaseResultMap">
        select * from stuinfo
        where 1=1
        <if test="name != null and name != ''">
            AND name like concat('%', #{name}, '%')
        </if>
        order by id desc
    </select>

输出以下语句:

说明:在实际开发中推荐使用这种方式。

方式四

 在Mybatis中的写法:

    <select id="queryLists"  parameterType="java.lang.String" resultMap="BaseResultMap">
        select * from stuinfo
        where 1=1
        <if test="name != null and name != ''">
            and POSITION(#{name} IN name) > 0
        </if>
        order by id desc
    </select>

      以上写法是在postgresql中的函数:POSITION(#{name} IN name)  在mysql中 请使用: INSTR(name, #{name}) > 0

输出以下语句:

需要注意

        当使用方式三的时候,如果查询的关键字就是%,  get 请使用%25 url编码 ,那情况会就会变成什么呢! 初始化数据中name有6条数据中包含%。

查询的sql如下:

select * from stuinfo where name like concat('%','%','%')

查出来全部的数据,并不是只包含了%的数据,如果查询也是一样的。

那这种情况肯定是不满足查询需求的,则需要调整。

解决以上问题

 代码中处理:

    @GetMapping("/lists")
    @ResponseBody
    public List<StuInfo> lists(String name){
        name = name.replaceAll("_", "\\\\_");
        name = name.replaceAll("%", "\\\\%");
        return stuInfoService.getLists(name);
    }

 在Mybatis中的写法:

    <select id="queryLists"  parameterType="java.lang.String" resultMap="BaseResultMap">
        select * from stuinfo
        where 1=1
        <if test="name != null and name != ''">
            AND name like concat('%',#{name,jdbcType=VARCHAR},'%') ESCAPE '\'
        </if>
        order by id desc
    </select>

输出以下语句:

      以上两种本质都是对查询的关键字进行了处理,这种处理在代码中可以使用拦截器或者AOP等技术统一处理。

总结

1、不要写方式一的这种模糊查询,容易发生sql注入!

     建议使用第三种方式进行模糊查询

2、上面这前三种模糊查询,都是使用%关键字%,这种方式是不会走索引的,大数据量时候有查询效率低,第四中使用字符串包含函数。

看情况,可以使用全文索引;或者使用ES进行

3、注意关键词中有%、_ 这些特殊字符如何处理。

1、业务上不允许输入这些字符,需要通过(前台、后台)进行过滤。

2、使用上面的ESCAPE或者转义。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物理隔离条件下的数据安全导入导出方案,哪种最安全可控?

数据安全在当今信息化社会中扮演着至关重要的角色&#xff0c;尤其像政府、军工等单位&#xff0c;有比较多的核心数据要保护&#xff0c;一旦出现数据泄漏&#xff0c;将造成不可估量的后果。因此为了保护数据安全&#xff0c;政府、军工等单位一般会采取纯物理隔离&#xff0…

离散型制造行业智能工厂解决方案,助力国家新智产业升级

离散型制造行业智能工厂标准解决方案 离散型制造行业的智能工厂解决方案是推动国家智能制造产业升级的关键。 1. 集中优势资源&#xff1a;实施攻关计划&#xff0c;瞄准关键核心技术和重点产业进行定向突破&#xff0c;特别是在集成电路(IC)、AI、生物医药等领域。2. 国家创…

CentOS 7虚拟机配置静态IP地址(一)

IP地址的配置 以下几个地址需要记住&#xff0c;在配置中使用 &#xff08;1&#xff09;查看MAC地址&#xff08;点击菜单虚拟机-设置-网络适配器-高级-记住MAC地址&#xff09; &#xff08;2&#xff09;查看子网掩码和网关IP&#xff08;点击菜单编辑-虚拟网络编辑器-选择…

Rust入门-所有权

一、为什么、是什么、怎么用 1、为什么Rust要提出一个所有权和借用的概念 所有的程序都必须和计算机内存打交道&#xff0c;如何从内存中申请空间来存放程序的运行内容&#xff0c;如何在不需要的时候释放这些空间&#xff0c;成为所有编程语言设计的难点之一。 主要分为三种…

MemFire解决方案-政企数据库云服务解决方案

方案背景 随着越来越多的政府部门/企事业单位完成数字化转型升级&#xff0c;新技术的应用日益普遍&#xff0c;对系统并发服务能力的需求不断提高。办公OA、档案、门户、监控、财务、ERP、订单等各类系统对数据库的要求越来越苛刻&#xff0c;很多企业/政府部门都面临如下挑战…

Unity的Animator Animation的使用攻略

Animator 动画控制器 Animation 动画 动画片段 .anin 一、创建Animator 创建动画控制器 模型添加Animator组件 把控制器和模型绑定 二、创建动画 进入动画界面 创建动画片段anin 动画窗口分析 制作动画 点击录制&#xff0c; 移动子对象&#xff0c;在视窗 通过移动线来编辑关…

第53篇:算法的硬件实现<四>

Q&#xff1a;本期我们在DE2-115开发板上实现二进制搜索算法电路&#xff0c;查找数据A在数组中的位置。 A&#xff1a;使用SW[9]设定开始查找信号&#xff0c;数据A由SW[7:0]设定&#xff0c;KEY[0]设定为复位信号&#xff0c;板载50MHz时钟作为电路的时钟输入&#xff0c;确…

Python | Leetcode Python题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; class Solution:def isMatch(self, s: str, p: str) -> bool:def allStars(st: str, left: int, right: int) -> bool:return all(st[i] * for i in range(left, right))def charMatch(u: str, v: str) -> bool:return u v or v…

1125页Go语言技术手册,涵盖Go语言所有核心知识点,限时免费下载!

从Docker的兴起&#xff0c;到Kubernetes的冲击&#xff0c;让Go语言在后端的地位&#xff0c;尤其在偏中高级业务需求(对性能、代码质量、架构设计等)中已经不可撼动。后端开发工程师逐渐开始对Go语言产生兴趣&#xff0c;无论是擅长何种语言的后端工程师&#xff0c;个人认为…

德思特车载天线方案:打造智能互联的公共安全交通网络

作者介绍 一、方案介绍 随着自动驾驶与智慧汽车概念的逐步推进&#xff0c;人们对汽车的交互性、智能性、互联性有了更高的要求。今天&#xff0c;大多数汽车制造商和供应商普遍将GNSS定位功能与其他信号如广播、电视、蓝牙、Wifi一起集成到汽车中&#xff0c;包括博世、大陆、…

泽攸科普——扫描电子显微镜(SEM)全攻略:轻轻松松搞定形貌特征

在科学的殿堂里&#xff0c;有一台神奇的仪器&#xff0c;它能将我们的视野拓展到难以想象的微观尺度&#xff0c;让我们得以窥探那些肉眼无法捕捉的精妙结构和隐秘细节。这台仪器就是扫描电子显微镜&#xff08;Scanning Electron Microscope, SEM&#xff09;。它犹如一双洞察…

车灯专用方案12V24V36V48V转9V/12V 线性恒流H7306

电流控制&#xff1a;为了保持输出电流的恒定&#xff0c;转换器使用一种称为恒流控制的技术。恒流控制通常通过测量输出电流并与一个参考电流进行比较来实现。如果输出电流超过参考电流&#xff0c;控制电路将调整输出电压或电流&#xff0c;以降低输出电流至所需的恒定值。 …

2023年蓝桥杯C++A组第三题:更小的数(双指针暴力遍历解法)

题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串&#xff0c;下标从 0 到 n − 1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。小蓝想要将选出的…

云盘怎么选最好!

选择云盘时&#xff0c;您应该考虑以下几个关键因素来确保选中最适合您需求的服务&#xff1a; 速度&#xff1a;选择云盘时&#xff0c;传输速度是一个重要的考量点。您应该选择一个即使不使用会员服务也能提供较快上传和下载速度的云盘服务。 存储空间&#xff1a;不同的云盘…

Ardupilot OpenIPC 基于WFB-NG构架分析和数据链路思考

Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考 1. 源由2. OpenIPC安装2.1 安装2.2 配置2.2.1 天空端配置文件2.2.2 地面端配置文件 2.3 当前配置选择 3. WFB-NG安装3.1 RTL8812AU安装3.1.1 驱动安装3.1.2 定位设备 3.2 wfb-ng安装3.2.1 传输层安装3.2.2 配置…

WordPress social-warfare插件XSS和RCE漏洞【CVE-2019-9978】

WordPress social-warfare插件XSS和RCE漏洞 ~~ 漏洞编号 : CVE-2019-9978 影响版本 : WordPress social-warfare < 3.5.3 漏洞描述 : WordPress是一套使用PHP语言开发的博客平台&#xff0c;该平台支持在PHP和MySQL的服务器上架设个人博客网站。social-warfare plugin是使用…

Kimi Chat四大更新详细解读!模型能力提升,支持语音输入输出!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

clickhouse数据去重函数介绍(count distinct)

非精确去重函数&#xff1a;uniq、uniqHLL12、uniqCombined 精确去重函数&#xff1a;uniqExact、groupBitmap 测试数据量&#xff1a;2000w 结论&#xff1a; 1.整形值精确去重场景&#xff0c;groupBitmap 比 uniqExact至少快 2x 2.groupBitmap仅支持无符号整形值去重&#x…

【LAMMPS学习】八、基础知识(3.6)计算热导率

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

我的一些 35+ 前同事的现状

大家好&#xff0c;我是坤哥&#xff0c;好久不见&#xff0c;今天简单和大家聊一下我目前观察到的前同事的现状 今年和一些前同事简单聊过&#xff0c;他们的现状如下&#xff1a; A: 去新西兰做 iOS 开发快 10 年了&#xff0c;马上就要拿到永久居留证了&#xff0c;他说在新…