mybatis #{} 和 ${} 的区别?
  RRqNAiOO6ptj 2023年11月12日 12 0



文章目录

  • ⭐专栏介绍
  • 问题描述
  • 问题答案


⭐专栏介绍

本专栏会持续更新各种关于JAVA的问题,包括面试题,JAVA入门到精通等。

更新速度保持在每天3—5篇

mybatis #{} 和 ${} 的区别?_文本替换

问题描述

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

mybatis #{} 和 ${} 的区别?_SQL_02

问题答案

Mybatis中的#{}和${}是用于动态SQL的两种不同的占位符语法。

#{}:这是Mybatis中的预编译语法,表示将参数值作为一个占位符来使用。使用#{}可以避免SQL注入的风险。在SQL被预编译之后,#{}中的参数值会通过JDBC的预编译机制进行占位符替换。即使参数是字符串类型,也可以自动添加引号,使得传入的参数值在SQL中被当作字符串处理。
例如,假设有一个查询语句:

SELECT * FROM users WHERE username = #{username}

当传入参数为"John"时,会被转化为:

SELECT * FROM users WHERE username = 'John'

mybatis #{} 和 ${} 的区别?_文本替换_03{}时,传入的参数值会被直接替换到SQL语句中,没有任何额外的处理。这种写法可以用于表名、列名等无法使用预编译的场景。但是需要注意的是,使用${}时存在SQL注入的风险,因为参数值直接嵌入到SQL语句中,没有任何过滤或转义。
例如,假设有一个查询语句:

SELECT * FROM ${tableName}

当传入参数为"users"时,会被转化为:

SELECT * FROM users

总结:

使用#{}可以更安全地处理参数,并且能够自动处理类型转换和特殊字符的转义。
使用${}可以进行更灵活的SQL拼接,但需要注意防止SQL注入的风险。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

RRqNAiOO6ptj