mybatis - 取值符号:# 和 $的区别

MyBatis中,#$ 是两种不同的取值符号,它们在SQL语句中的使用方式和作用有所不同。

1、#符号

	"#符号",用于预编译语句,会将传入的参数值转义并替换为占位符,从而防止SQL注入攻击,
	
	在使用#符号时,MyBatis会将传入的参数值作为一个整体传递给数据库,而不会对参数值进行拼接操作。

	* 例如,
	
		使用#符号时:
			
			SELECT * FROM users WHERE id = #{userId}

			"#{userId}"会被替换为一个占位符,传入的参数值,会被转义并安全地传递给数据库。

预编译处理:

#{}:MyBatis会使用预编译的SQL语句,并为每个参数设置相应的占位符(通常是 ?),

当执行SQL时,MyBatis会使用"PreparedStatement的setXXX()方法"来设置参数值,

这种方式,可以有效地防止SQL注入攻击,因为参数值不会被解析为SQL的一部分。

类型处理:

#{}:MyBatis会根据参数的类型,自动进行必要的类型转换和转义处理。


2、$符号

	"$符号",用于字符串拼接,会直接将传入的参数值,拼接到SQL语句中,
	
	在使用$符号时,传入的参数值不会被转义,可能存在SQL注入的风险。

	* 例如,
	
		使用$符号时:

			SELECT * FROM users WHERE id = ${userId}

			"${userId}"会被直接替换为传入的参数值,可能存在SQL注入的风险。

预编译处理:

${}:MyBatis会直接将参数值替换到SQL语句中,

这意味着,如果参数值中包含"SQL关键字" 或 "特殊字符",

它们可能会被错误地解析为SQL的一部分,从而导致SQL注入的风险,

因此,`除非确实需要,否则应避免使用${}`。

类型处理:

${}:MyBatis不会对参数值进行任何处理,只是简单地将其替换到SQL语句中,

这意味着,你需要自己确保参数值的格式和类型是正确的。


总之:

  • 使用 #符号 可以防止SQL注入攻击,适合传递参数值

  • 使用 $符号 适合在SQL语句中进行字符串拼接,但需要注意防范SQL注入攻击

相关推荐

  1. mybatis - 取值符号:# $区别

    2024-04-26 19:16:03       17 阅读
  2. mybatismybatis-plus区别

    2024-04-26 19:16:03       15 阅读
  3. Mybatis${}#{}区别

    2024-04-26 19:16:03       23 阅读
  4. mybatis 中 #{} ${}区别是什么?

    2024-04-26 19:16:03       13 阅读
  5. MyBatis ${}#{}区别

    2024-04-26 19:16:03       37 阅读
  6. mybatis中$#区别以及各自使用场景

    2024-04-26 19:16:03       19 阅读
  7. MybatisHibernate作用区别及底层原理分析

    2024-04-26 19:16:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 19:16:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 19:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 19:16:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 19:16:03       20 阅读

热门阅读

  1. 【动态规划】Leetcode 322. 零钱兑换【中等】

    2024-04-26 19:16:03       10 阅读
  2. 代谢网络模型学习笔记(序章)

    2024-04-26 19:16:03       12 阅读
  3. 设计模式之单例模式

    2024-04-26 19:16:03       15 阅读
  4. System.Exception有哪些类型分别什么意思

    2024-04-26 19:16:03       18 阅读
  5. 1.mysql--常用sql(2)

    2024-04-26 19:16:03       11 阅读
  6. 【C++刷题】优选算法——动态规划第五辑

    2024-04-26 19:16:03       14 阅读
  7. leetcode2418.按身高排序

    2024-04-26 19:16:03       9 阅读