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

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

先说结论:二者肯定是有区别的

区别总结

${ } 直接的 字符串 替换,在mybatis的动态 SQL 解析阶段将会进行变量替换。

#{ } 通过预编译,用占位符的方式?传值可以把一些特殊的字符进行转义,这样可以防止一些sql注入。

举例说明区别

比如:数据库表中id这个字段的内容为123456 or 1=1

  1. 因为#{ }接收参数使用了sql预编译,最后拼接的sql会变成:
    select id,app,url,ip,area_name,os,browser from jump_log where id = ?
    
    执行sql时会将参数进行转义,把传入的参数:123456 or 1=1加了单引号’,执行时的sql是:
    select id,app,url,ip,area_name,os,browser from jump_log where id = '123456 or 1=1'
    
  2. 通过${ }接收参数之后,最后拼接的sql如下:
    select id,app,url,ip,area_name,os,browser from jump_log where id = 123456 or 1=1
    
    这是典型的sql注入,后面的 or 1=1 会让前面的 id=123456条件失效,相当于整个where条件都失效了,最后sql相当于执行了:
    select id,app,url,ip,area_name,os,browser from jump_log
    

使用场景

在实际使用时,我们需要根据实际场景去选择,如

  1. :数据库的名称需要通过参数统一起来,以便下次修改数据库名时,只有修改一个地方即可,这时便使用${mallDbName}
<select id="selectById" resultMap="JumpLogResult">selectid,app,url,ip,area_name,os,browser from ${mallDbName}.jump_log<where>id = #{id}</where>
</select>
http://www.lryc.cn/news/144616.html

相关文章:

  • 【真人语音】讯飞星火个人声音训练及导出下载工具V0.2.exe
  • 正中优配:创业板指大涨3.47%!减速器等概念板块掀涨停潮!
  • 多功能租车平台微信小程序源码 汽车租赁平台源码 摩托车租车平台源码 汽车租赁小程序源码
  • spring事件和线程池区别
  • 深圳寄墨西哥专线国际物流详解
  • PHP教学资源管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页
  • 机器学习---决策树算法(CLS、ID3、CART)
  • 【算法与数据结构】404、LeetCode左叶子之和
  • Apifox下载安装步骤
  • 大华摄像头有问题,海康摄像头也有问题
  • Linux多线程同步机制(下)
  • 【QT】ComboBox的使用(14)
  • 关于写英文论文的一些总结
  • swagger 2.10.5 整合 spring boot
  • Python 练习:剔除数字
  • Linux系统编程:基础知识入门学习笔记汇总
  • 基于硬件隔离增强risc-v调试安全1_问题描述
  • OpenCV简介
  • Windows下编译qt-src-5.15.10
  • 有关linux排查服务器资源问题
  • 【设计模式】Head First 设计模式——观察者模式 C++实现
  • 【ES】笔记-Promise基本使用
  • 服务器数据恢复-reiserfs文件系统损坏如何恢复数据?
  • 直播预告:把脉2023年下半场—主动防御邮箱盗号威胁
  • 专题:平面、空间直线参数方程下的切线斜率问题
  • JavaScript—对象与构造方法
  • 微信小程序社区户口管理的系统设计与实现
  • 闲人闲谈PS之四十六——网络生产全流程
  • 如何在VR头显端实现低延迟的RTSP或RTMP播放
  • 【工具类】提高办公效率(兼具有趣、好玩)