Mybatis中#{}和${}有什么区别

    前几天去一家公司笔试,有一道题是“mybatis中#{}和${}的区别?”。说实话,当时自己真的不是很清楚,因为我本人没有怎么学习过mybatis,虽然最近做的项目用的是mybatis,但也只涉及到最基本的增、删、改、查,多表之间的关联也几乎没有用到。而#{}只在mapper映射文件中用到,${}在js和前端jsp页面中用到。后来上网查了一下发现,二者之间的区别还是很大的,现在把自己查到的资料归纳总结如下,便于大家讨论学习。

 

一般说来,二者的区别可总结为以下6点:

(1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”,如果传入的值是id,则解析成的sql为order by “id”。

(2)$将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id。 

(3)#方式在很大程度上能够防止sql注入。

(4)$方式无法防止sql注入。

(5)$方式一般用于传入数据库对象,例如传入表名。

(6)一般能用#的就别用$。 

ps:在使用mybatis中还遇到的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。

实例讲解:

      动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。

在下面的语句中,如果 name 的值为 zhangsan,则两种方式无任何区别:

select * from user where name = #{name};
select * from user where name = ${name};

  其解析之后的结果均为

有道小P 有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64 查看详情 有道小P

select * from user where name = 'zhangsan';

      但是 #{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,变成如下的 sql 语句:

select * from user where name = ?;

  而 ${} 则只是简单的字符串替换,在动态解析阶段,该 sql 语句会被解析成

select * from user where name = 'zhangsan';

  以上,#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。

  那么,在使用过程中我们应该使用哪种方式呢?

  答案是:优先使用 #{}。因为 ${} 会导致 sql 注入的问题。

看下面的例子: 

select * from ${tableName} where name = #{name}

  在这个例子中,如果表名为

   user; delete user; — 

  则动态解析之后 sql 如下:

select * from user; delete user; -- where name = ?;

  –之后的语句被注释掉,而原本查询用户的语句变成了查询所有用户信息+删除用户表的语句,会对数据库造成重大损伤,极大可能导致服务器宕机。

  但是表名用参数传递进来的时候,只能使用 ${} 。这也提醒我们在这种用法中要小心sql注入的问题。

以上就是Mybatis中#{}和${}有什么区别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/401688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 19:40:17
下一篇 2025年11月6日 19:43:03

相关推荐

  • 什么是合约交易?它和现货交易有什么区别,风险有多大?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 合约交易,在加密货币市场中,是一种允许投资者对数字资产未来价格进行预测与交易的金融衍生品,无需实际拥有标的资产。它引入了杠杆机制,能够显著放大潜在收益,但同时也成倍…

    2025年12月9日
    000
  • 加密Launchpad平台是什么?如何运作?有哪些类型?一文详解

    在加密货币领域,早期参与项目可以为投资者提供高收益机会。加密货币 发行平台 (launchpad)允许投资者在新代币或项目 ipo 之前以低价购入,并在未来升值时获利。随着区块链技术的兴起,launchpad平台已成为投资者和项目创始人安全可靠的交流平台。 Binance币安 欧易OKX ️ Huo…

    2025年12月9日 好文分享
    000
  • 稳定币有什么作用

    稳定币(stablecoin)是一类与特定资产挂钩,即锚定法定货币或商品,旨在保持币值相对稳定的一类加密数字货币。 稳定币的定义具有三大要点。一是币值的稳定维持,通过与现实世界资产挂钩,如美元、黄金等;二是基于区块链技术上运行,区块链是无中心清算机构的分布式账本,可实现点对点直接的支付或结算等功能;…

    好文分享 2025年12月9日
    000
  • 一文看懂以太坊(ETH)和比特币(BTC)的本质区别是什么?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 比特币(BTC)常被称为“数字黄金”,其核心是作为一种价值存储和点对点支付系统;而以太坊(ETH)则更像一台“世界计算机”,是一个用于构建和运行去中心化应用(DAp…

    2025年12月9日
    000
  • 公链、侧链、联盟链有什么区别?一文带你分清这些基本概念!

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 区块链技术日益普及,但公链、联盟链和侧链等概念常让人困惑。它们在开放性、去中心化程度、交易效率和应用场景上各有侧重,清晰理解其核心区别是进入区块链世界的基础。 公链…

    2025年12月9日
    000
  • 什么是 BTC 现货 ETF?有何特点?BTC现货与期货ETF比较

    比特币(BTC)作为全球市值最大的加密资产,近年来在全球金融市场中扮演着越来越重要的角色。随着其影响力的扩大,传统金融机构对于比特币的关注度也持续升温,其中比特币现货ETF(交易所交易基金)的推出,无疑是这一趋势中的一个里程碑事件。BTC 现货 ETF 的出现,为普通投资者提供了一个无需直接持有比特…

    2025年12月9日
    000
  • 比特币(BTC)如果不是加密货币,详细了解那是什么?传闻中的中本聪发表看法

    Binance币安 欧易OKX ️ Huobi火币️ 长期被猜测为中本聪本人的 Jack Dorsey 再度掀起热议,他在最新发言中表示“比特币不属于加密货币”,强调其与主流数字资产存在本质区别。 作为 Twitter 的联合创始人及比特币的忠实拥趸,Jack Dorsey 近日在社交媒体平台 X(…

    2025年12月9日 好文分享
    000
  • 什么是加密货币中的再质押?它是如何运作的?优势和风险介绍

    质押加密货币是投资者获得被动收益的最常见方式之一。但它有一个陷阱:一旦代币被质押,它们就会被锁定在一个网络上。它们保护着这条链,但不能在其他任何地方使用。 Binance币安 欧易OKX ️ Huobi火币️ 一种名为“重新质押”的新理念正在改变这一现状。它允许相同的质押资产同时保护多个协议。简单来…

    2025年12月9日
    000
  • 什么是市价单和限价单?下单时我该如何选择才能买到更好的价格?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 在加密货币交易中,市价单和限价单是两种最基础的下单指令。简单来说,市价单追求成交速度,而限价单追求成交价格。理解两者的核心区别,是您在多变市场中做出明智交易决策的关…

    2025年12月9日
    000
  • 什么是BRC-20?它和以太坊上的ERC-20有什么不同?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: BRC-20是基于比特币网络的一种实验性同质化代币标准。它利用Ordinals协议将数据铭刻在聪(Satoshi)上,实现了在比特币链上发行和转移代币的功能,这与依…

    好文分享 2025年12月9日
    000
  • 什么是ICO/IDO/IEO?它们是参与早期项目的好机会吗?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 在加密货币世界,ICO、IEO和IDO是项目初创团队筹集资金的关键方式。它们为早期投资者提供了参与项目的机会,但也伴随着不同的风险和机制。了解它们的核心区别是做出明…

    2025年12月9日
    000
  • 中心化交易所(CEX)与去中心化交易所(DEX)对比

    在数字资产交易的广阔天地中,中心化交易所(cex)和去中心化交易所(dex)是两种主流的平台类型,它们各自拥有独特的优势和局限性。理解两者的核心差异,对于投资者来说至关重要,因为它直接影响到交易的安全性、便捷性以及所能提供的资产种类。本文将深入探讨cex和dex的运作机制、特点以及它们在实际应用中的…

    好文分享 2025年12月9日
    000
  • 永续合约和交割合约的区别是什么?

    Binance币安 欧易OKX ️ Huobi火币️ 永续合约和交割合约的核心区别主要体现在到期时间、结算机制和交易灵活性上,适合不同类型的交易需求。 有没有到期日 这是两者最根本的差异。交割合约有明确的到期时间,比如当周、次周或季度合约,到了指定日期不管持仓者是否愿意,系统都会自动按结算价平仓。这…

    2025年12月9日
    000
  • 现货和合约有什么区别?风险与收益对比

    Binance币安 欧易OKX ️ Huobi火币️ 现货和合约是两种完全不同的交易方式,核心区别在于是否真正持有资产以及风险收益结构。 本质与所有权不同 现货交易是你用钱直接购买数字资产,比如花5万元买0.1个比特币,这0.1个BTC就实实在在属于你。你可以把它转到自己的钱 包,长期持有,资产价值…

    2025年12月9日
    000
  • Snorter Token (SNORT) 币是什么?SNORT特点、优势、增长潜力及未来前景

    最近,一个项目在表情包币市场掀起了波澜:snorter token ($snort)。它之所以受到投资者的关注,不仅因为它是一款基于幽默或表情包的代币,还因为它旨在与现实世界的交易机器人集成。本文将探讨 snorter token 的基本概念和功能,它与竞争项目的区别,以及它未来的价格前景。 Bin…

    2025年12月9日
    000
  • 加密货币交易中的看涨与看跌旗形形态是什么?一文详细指南

    在加密货币交易中,识别如牛市旗形和熊市旗形等延续形态,可能是提早捕捉突破或完全错失机会的关键。这些旗形形态帮助交易者识别强势趋势在继续同方向发展之前的短暂停顿。 Binance币安 欧易OKX ️ Huobi火币️ 通过学习读取这些形态,交易者可以发现潜在的进场和离场点,改善时机把握,并更有效地管理…

    2025年12月9日 好文分享
    000
  • 比特币BTC官网首页 比特币移动App入口

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 对于初次接触比特币(BTC)的用户来说,找到权威的官方信息和安全的移动应用入口至关重要。本文旨在提供一套清晰的指引,帮助您辨别可靠资源,并了解在选择相关移动应用时应…

    2025年12月9日
    000
  • 新手避坑:现货交易最常见的三大错误

    Binance币安 欧易OKX ️ Huobi火币️ 新手做现货交易,最容易在起步阶段栽跟头。真正影响结果的往往不是复杂的理论,而是几个关键的习惯性错误。想站稳脚跟,先避开这三个最常见的坑。 一、没计划就进场,靠感觉交易 很多新手一上来就想着赚钱,看别人买什么自己也跟着买,或者听到一个消息就急着下单…

    2025年12月9日
    000
  • “Token”和“Coin”是一个东西吗? 它们之间有什么根本区别?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 在加密货币世界里,Coin和Token常常被混用,但它们是根本不同的两个概念。最核心的区别在于Coin拥有自己独立的区块链,而Token则依附于现有的区块链(如以太…

    2025年12月9日
    000
  • 什么是永续合约?简单讲清合约和现货的区别

    Binance币安 欧易OKX ️ Huobi火币️ 永续合约和现货是两种完全不同的交易方式,核心区别在于你是否真正拥有资产,以及风险程度的天壤之别。 你到底有没有真正买到这个资产? 现货交易就像去商店买东西。你花1万元买入比特币,这枚比特币就实实在在属于你了,可以提走或长期持有。你赚或亏,完全取决…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信