MyBatis中${} 和 #{} 有什么区别小结

"MyBatis中${} 和 #{} 有什么区别"是MyBatis中常见的问题,从语法和使用角度分析这两种符号的区别,有助于读者更好地理解和使用MyBatis。

1.语法差异

  • ${}:会将SQL语句中的${}替换为实际的参数值,一个${}只能替换一个参数值,因此如果想传递的参数需要在SQL中拼接就需要使用${}。
  • #{}:会将SQL语句中的#{}替换为?,即SQL预处理语句中的参数占位符,MyBatis底层会自动将传入的参数进行预编译,防止SQL注入攻击,因此推荐使用#{}。

示例1:

SQL语句中使用${},将会将传入的参数直接替换在SQL语句中,如:

<select id="getUserById" resultMap="userResult">
  SELECT * FROM user WHERE id=${id}
</select>

如果传入的参数是id=1,则执行的SQL语句就是:

SELECT * FROM user WHERE id=1

这种方式虽然简单,但是容易发生SQL注入攻击。

示例2:

SQL语句中使用#{},效果就像JDBC的PreparedStatement,最终生成的SQL语句中使用?占位符,例如:

<select id="getUserById" resultMap="userResult">
  SELECT * FROM user WHERE id=#{id}
</select>

如果传入的参数是id=1,则执行的SQL语句就是:

SELECT * FROM user WHERE id=?

这种方式在MyBatis中是推荐的方式,能够有效避免SQL注入攻击。

2.变量占位符区别

  • ${}:变量替换时不会将参数值加上引号或转义字符,因此如果参数是字符串类型,则还需自己手动添加单引号或双引号,如:username='${username}'
  • #{}:变量替换时会将参数值加上引号或转义字符,因此不用再手动添加单引号或双引号。

示例3:

<select id="getUserByName" resultMap="userResult">
SELECT * FROM user WHERE username='${username}'
</select>

根据用户名查询数据时使用${},如果传入的参数是username=Tom,则最终执行SQL语句类似于:

SELECT * FROM user WHERE username='Tom'

这种方式容易发生SQL注入攻击,所以不建议使用。

示例4:

<select id="getUserByName" resultMap="userResult">
SELECT * FROM user WHERE username=#{username}
</select>

根据用户名查询数据时使用#{},MyBatis会自动对参数做转义处理,避免SQL注入攻击,如果传入的参数是username=Tom,则最终执行的SQL语句类似于:

SELECT * FROM user WHERE username='Tom'

这种方式会自动完成参数的转义处理,避免了SQL注入攻击的风险。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis中${} 和 #{} 有什么区别小结 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • steam怎么隐身?steam在线离开忙碌等状态详解

    以下是“steam怎么隐身?steam在线离开忙碌等状态详解”的完整攻略: steam怎么隐身?steam在线离开忙碌等状态详解 Steam是一款非常流行的游戏平台,用户可以在Steam上购买和下载游戏,并与其他用户进行游戏交流。下面是Steam在线状态的详细说明。 在线状态 Steam的在线状态分为以下几种: 在线:用户可以与其他用户进行游戏交流。 忙碌:…

    html 2023年5月18日
    00
  • HTML基本元素标签介绍

    HTML基本元素标签介绍 HTML是一种标记语言,它使用一系列的标签来描述网页中的内容,通常我们把这些标签称之为元素。 基本语法 一个HTML元素通常由起始标签、内容和结束标签三个部分组成,如下所示: <标签名>内容</标签名> 其中,<和>代表一个标签的起始和结束,中间的内容即为标签的实际内容。 常用HTML元素 标题元…

    html 2023年5月30日
    00
  • ASP.NET使用xslt将xml转换成Excel

    下面是“ASP.NET使用XSLT将XML转换成Excel”的完整攻略: 1. 准备工作 首先,我们需准备以下工具和环境: Visual Studio IDE: 用于编写和调试 ASP.NET 应用程序的集成开发环境。 .NET Framework: 在 Windows 上运行 ASP.NET 应用程序所需的开发环境。 XML 文件: 包含要转换为 Exce…

    html 2023年5月30日
    00
  • java中常用XML解析器的使用

    Java常用XML解析器的使用 XML(eXtensible Markup Language)是一种可以存储和传输数据的标记语言,也是数据交换的重要格式。Java提供了许多支持XML解析的工具,本文将介绍Java常用的XML解析器的使用。 Java常用的XML解析器 Java常用的XML解析器有DOM(Document Object Model)、SAX(S…

    html 2023年5月30日
    00
  • plsql developer怎么连接数据库 plsql developer数据库连接教程

    以下是“plsql developer怎么连接数据库 plsql developer数据库连接教程”的完整攻略: plsql developer怎么连接数据库 plsql developer数据库连接教程 PL/SQL Developer是一款常用的Oracle数据库开发工具,可以用于编写、调试和优化PL/SQL代码。以下是连接数据库的详细教程: 打开PL/…

    html 2023年5月18日
    00
  • React中的JSX { }的使用详解

    当我们在开发React应用时,通常会用到JSX语法。JSX是一种像HTML那样的语法扩展,它允许我们在JavaScript代码中编写类似XML的代码。在JSX中,我们可以使用大括号{ }来插入JavaScript表达式。 JSX中大括号 { } 的使用方法 1. 注入变量 我们可以使用大括号 { } 将JavaScript表达式嵌入到JSX语法中,如下所示:…

    html 2023年5月30日
    00
  • WAP建站WML语言语法基础教程第3/6页

    下面是关于“WAP建站WML语言语法基础教程第3/6页”的详细讲解。 标题 “WAP建站WML语言语法基础教程第3/6页”是一个标题,应该用一级标题显示,即:# WAP建站WML语言语法基础教程第3/6页。 内容概述 第3/6页是WML语言基础教程的第三章,本章主要讲解WML语言中使用的标签,以及标签的使用方法和属性。本章的内容对于学习WML语言非常重要。 …

    html 2023年5月30日
    00
  • CentOS终端命令行显示中文乱码的解决方法

    以下是“CentOS终端命令行显示中文乱码的解决方法”的完整攻略。 问题描述 在 CentOS 终端命令行输入中文时,可能会出现乱码现象,给操作和查询带来不便。 解决方法 在 CentOS 终端命令行显示中文乱码的问题,可以通过以下步骤进行解决: 确认 CentOS 系统中已经安装了中文字体,可以通过以下命令进行确认: fc-list :lang=zh 若返…

    html 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部