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

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

目录

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

1.通过单引号拼接+${}

1)mapper接口

2)Mapper.xml

3)测试代码

4) 测试结果

2.通过concat()函数拼接(个人推荐使用这种)

1)mapper接口

2)Mapper.xml

3)测试代码

4) 测试结果

3.通过"%"#{}"%" 

1)mapper接口

2)Mapper.xml

3)测试代码

4) 测试结果

附加

1.User实体

2.LikeMapper类

3.LikeMapperTest代码

4.LikeMapper.xml文件

5.表结构 


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

1.通过单引号拼接+${}

        这种方法使用了字符串替换的方式来进行模糊查询。但是这种方式存在SQL注入的风险,因为"${name}"会直接将变量值插入到SQL语句中,如果输入没有经过适当的过滤,则可能会导致安全问题。

:在XML文件中不建议使用'%${name}%'的方式,而是应该使用concat()或者%' + #{name} + '% '来避免SQL注入。 

1)mapper接口

/*** 通过单引号拼接+${}*/
public List<User> getLikeBySingleQuote(String name);

2)Mapper.xml

<!--单引号拼接+${}-->
<select id="getLikeBySingleQuote" resultType="org.xiji.enty.User">select * from user where username like '%${name}%'
</select>

3)测试代码

/*** 通过单引号拼接+${}*   '%${}%'*/
@Test
public void testGetLikeBySingleQuote(){String name = "xiji";List<User> likeBySingleQuote = likeMapper.getLikeBySingleQuote(name);System.out.println(likeBySingleQuote.toString());
}

4) 测试结果

2.通过concat()函数拼接(个人推荐使用这种)

        使用数据库的concat()函数可以避免SQL注入的问题,并且是跨平台的(MySQL, PostgreSQL等支持concat()或类似函数)。

1)mapper接口

/*** 通过ConCat函数拼接**/
public List<User> getLikeByConCat(String name);

2)Mapper.xml

<!--concat函数拼接-->
<select id="getLikeByConCat" resultType="org.xiji.enty.User">select * from user where username like concat('%',#{name},'%')
</select>

3)测试代码

/*** 通过concat函数拼接*   concat('%',#{name},'%')*/
@Test
public void testGetLikeByConCat(){String name = "xiji";List<User> likeByConCat = likeMapper.getLikeByConCat(name);System.out.println(likeByConCat.toString());
}

4) 测试结果

3.通过"%"#{}"%" 

        这种方式也是安全的,并且简洁。它使用了MyBatis的预编译功能,自动对参数进行转义,防止SQL注入攻击。

注:虽然使用'%'#{name}'%'看起来简洁,但是在某些情况下,如果name包含特殊字符,可能需要进一步的处理来保证安全性和正确性。因此,推荐使用concat()函数来构建LIKE语句。

1)mapper接口

/*** 通过 “%”#{}“%” 拼接*/
public List<User> getLikeByPercent(String name);

2)Mapper.xml

<!-- "%"#{}"%"  -->
<select id="getLikeByPercent" resultType="org.xiji.enty.User">select  * from user where username like "%"#{name}"%"
</select>

3)测试代码

/***  通过通过 "%"#{}"%" 拼接*   like '%#{name}%'*/@Test
public void testGetLikeByPercent(){String name = "xiji";List<User> likeByPercent = likeMapper.getLikeByPercent(name);System.out.println(likeByPercent.toString());
}

4) 测试结果

附加

1.User实体

package org.xiji.enty;public class User {private  int id;private String username;private String password;private String userInfo;public User() {}public User(int id, String username, String password, String userInfo) {this.id = id;this.username = username;this.password = password;this.userInfo = userInfo;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUserInfo() {return userInfo;}public void setUserInfo(String userInfo) {this.userInfo = userInfo;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", userInfo='" + userInfo + '\'' +'}';}
}

2.LikeMapper类

package org.xiji.mapper;import org.apache.ibatis.annotations.Mapper;
import org.xiji.enty.User;import java.util.List;/*** 模糊查询的三种方式*/
@Mapper
public interface LikeMapper {/*** 通过单引号拼接+${}*/public List<User> getLikeBySingleQuote(String name);/*** 通过ConCat函数拼接**/public List<User> getLikeByConCat(String name);/*** 通过 “%”#{}“%” 拼接*/public List<User> getLikeByPercent(String name);}

3.LikeMapperTest代码

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.xiji.enty.User;
import org.xiji.mapper.LikeMapper;import java.util.List;@SpringJUnitConfig(locations = {"classpath:springConfig.xml"})
public class LikeMapperTest {@Autowiredprivate LikeMapper likeMapper;/*** 通过单引号拼接+${}*   '%${}%'*/@Testpublic void testGetLikeBySingleQuote(){String name = "xiji";List<User> likeBySingleQuote = likeMapper.getLikeBySingleQuote(name);System.out.println(likeBySingleQuote.toString());}/*** 通过concat函数拼接*   concat('%',#{name},'%')*/@Testpublic void testGetLikeByConCat(){String name = "xiji";List<User> likeByConCat = likeMapper.getLikeByConCat(name);System.out.println(likeByConCat.toString());}/***  通过通过 “%”#{}“%” 拼接*   like '%#{name}%'*/@Testpublic void testGetLikeByPercent(){String name = "xiji";List<User> likeByPercent = likeMapper.getLikeByPercent(name);System.out.println(likeByPercent.toString());}}

4.LikeMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.xiji.mapper.LikeMapper"><!--模糊查询的三种方式--><!--单引号拼接+${}--><select id="getLikeBySingleQuote" resultType="org.xiji.enty.User">select * from user where username like '%${name}%'</select><!--concat函数拼接--><select id="getLikeByConCat" resultType="org.xiji.enty.User">select * from user where username like concat('%',#{name},'%')</select><!-- ”%“#{}“%”  --><select id="getLikeByPercent" resultType="org.xiji.enty.User">select  * from user where username like "%"#{name}"%"</select>
</mapper>

5.表结构 

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名字',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户密码',`userInfo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户信息',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QCustomPlot笔记(一)
  • Redis: 学习参考资料
  • 集团门户网站设计与实现
  • 文生视频算法
  • Unet改进35:添加FastKANConv2DLayer(2024最新改进方法)
  • 关键错误 你的开始菜单出现了问题 我们将尝试在你下一次登录时修复它。【笔记】
  • golang学习笔记21——golang协程管理及sync.WaitGroup的使用
  • leetcode 199.二叉树的右视图
  • docker容器中的内存占用高的问题分析
  • MybatisPlus实现多租户 全局拦截器
  • 学习图解算法 使用C语言
  • MySQL基于GTID同步模式搭建主从复制
  • QUIC的丢包处理
  • 论文阅读笔记 --- 图模互补:知识图谱与大模型融合综述 --- 按参考文献整理
  • 操作系统名词_文件下载_反弹shell_1
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 30天自制操作系统-2
  • canvas绘制圆角头像
  • Fabric架构演变之路
  • Flannel解读
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • node学习系列之简单文件上传
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • hi-nginx-1.3.4编译安装
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​TypeScript都不会用,也敢说会前端?
  • # 达梦数据库知识点
  • # 计算机视觉入门
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (C#)一个最简单的链表类
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (论文阅读30/100)Convolutional Pose Machines
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)Dubbo快速入门、介绍、使用
  • (一)UDP基本编程步骤
  • (一)基于IDEA的JAVA基础10
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)EXC_BREAKPOINT僵尸错误
  • (状压dp)uva 10817 Headmaster's Headache
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .gitignore文件忽略的内容不生效问题解决
  • .net mvc 获取url中controller和action
  • .Net OpenCVSharp生成灰度图和二值图
  • .net Signalr 使用笔记
  • .net 调用海康SDK以及常见的坑解释
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法