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

mybatis中${}和#{}的区别

先测试,再说结论

userService.selectStudentByClssIds(10000, "'wzh' or 1=1");
    List<StudentEntity> selectStudentByClssIds(@Param("stuId") int stuId, @Param("field") String field);
 <select id="selectStudentByClssIds" resultMap="StudentResultMap">SELECTstudent_id, name, age, genderFROM students where name = ${field}</select>

控制台sql执行日志

在这里插入图片描述

对比一下,如果是把${field}替换成#{filed}

在这里插入图片描述

再玩个更有趣的,如果我们某个sql查询字段需要通过入参确定,如下

<select id="selectStudentByClssIds" resultMap="StudentResultMap">SELECTstudent_id, #{field}, age, genderFROM students;</select>

我们的入参为name,测试结果如下
在这里插入图片描述

也就是说这个sql变成了SELECT student_id, 'wzh', age, gender FROM students;

我们把#{field}替换成${filed}再看一下

<select id="selectStudentByClssIds" resultMap="StudentResultMap">SELECTstudent_id, ${field}, age, genderFROM students;</select>

如下,恢复正常了
在这里插入图片描述

综上

在 MyBatis 中,#{} 和 ${} 是两种不同的占位符语法,用于处理 SQL 语句中的参数。它们的用途和效果各不相同,不可以混淆

#{} 用于将参数值作为预编译语句的参数。MyBatis 会将该参数值绑定到 SQL 语句中,并自动转换为 SQL 对应类型和进行转义,从而提高安全性,防止 SQL 注入。

${} 用于字符串替换,它直接将传入的参数值插入到 SQL 语句中。MyBatis 不会对使用 ${} 的参数进行处理或转义。 使用 ${} 时,参数直接拼接到 SQL 语句中,因此,如果传入的参数是用户输入的值,没有经过适当的验证和清理,会导致 SQL 注入风险。当您需要动态生成 SQL 语句的部分,如表名、列名等结构时。此时参数不能是用户输入,如,动态指定表名或列名

SELECT * FROM ${tableName} WHERE id = #{id} 
http://www.xdnf.cn/news/417781.html

相关文章:

  • 【RabbitMQ】工作队列和发布/订阅模式的具体实现
  • 微服务八股(自用)
  • React Native告别图标体积大手动更换慢的噩梦:让图标更新像修改文字一样简单
  • 聊一聊Electron中Chromium多进程架构
  • 数据结构day1
  • 使用 IntelliJ IDEA 和 Maven 创建 Spark 项目
  • 云原生|kubernetes|kubernetes的etcd集群备份策略
  • 高防服务器部署实战:从IP隐匿到协议混淆
  • Scala和Go差异
  • 【面试 · 三】react大集合(类式/函数式)
  • 需求与技术实现不匹配,如何协调
  • 【 Redis | 实战篇 秒杀实现 】
  • 在虚拟机Ubuntu18.04中安装NS2教程及应用
  • Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
  • niushop单商户V5多门店版V5.5.0全插件+商品称重、商家手机端+搭建环境教程
  • Unity引擎源码-物理系统详解-其一
  • centos中libc.so.6No such file的解决方式
  • AI+企业应用级PPT生成(实战)
  • 初识XML
  • 软件测试(概念1)
  • 使用CAS操作实现乐观锁的完整指南
  • C++的历史与发展
  • 原创-业务接口数据监控
  • MyBatis-Plus的批量插入与原生JDBC效率对比
  • git 怎么更改本地的存储的密码
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.3 风险指标可视化监控
  • Yarn-概述
  • 用自写的jQuery库+Ajax实现了省市联动
  • 专题三:穷举vs暴搜vs深搜vs回溯vs剪枝(全排列)决策树与递归实现详解
  • 实现 STM32 PWM 输出:原理、配置与应用详解