Mybatis #{}和${}的区别是什么?

发布时间:2023年12月29日

MyBatis 中的 #{}${} 是两种不同的占位符,它们在表达式语言中有不同的用途和功能。

#{} 是 MyBatis 的内置表达式语言,也被称为 JSR 303 标准的 EL(Expression Language)。它允许你在 SQL 语句中插入动态数据。使用 #{} 的好处是它可以防止 SQL 注入攻击,因为它会自动转义输入的数据,确保它们符合 SQL 语法。

举个例子,假设你有一个查询语句,它需要一个参数来查询数据库,这个参数是从前端传过来的用户名。你可以使用 #{} 来插入这个参数,如下所示:

SELECT * FROM users WHERE username = #{username}

在上述示例中,如果 username 的值来自前端用户的输入,那么使用 #{} 可以确保 SQL 语法正确,并且可以防止 SQL 注入攻击。

另一方面,${} 是一个普通的字符串插值表达式,它直接将变量名作为字符串插入到 SQL 语句中。这种表达式的缺点是它不会自动转义输入的数据,容易引发 SQL 注入问题。

举个例子,假设你有另一个查询语句,它直接使用了用户的输入作为查询条件:

SELECT * FROM users WHERE user_name = ${username}

在这种情况下,如果 username 的值来自前端用户的输入并且没有被正确地转义,那么这可能会导致 SQL 注入攻击。

因此,如果你在 MyBatis 中使用参数化查询,建议使用 #{} 而不是 ${}。这样可以确保数据的安全性,同时也可以提高代码的可读性和可维护性。
#{}是预编译处理,KaTeX parse error: Expected 'EOF', got '#' at position 21: …串替换。 Mybatis在处理#?{}时,会将sql中的#{}替…{}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。

文章来源:https://blog.csdn.net/qq_33240556/article/details/135193944
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。