Java Mybatis中的 ${ } 和 #{ }的区别使用详解

Java Mybatis中的 ${ } 和 #{ }的区别使用详解

1. 介绍

Java Mybatis 是一款优秀的数据持久化框架。在使用 Mybatis 进行 SQL 语句编写时,会用到两种不同的参数注入方式: ${ }#{ } 。这两种方式虽然看似相似,但实际上有很大的区别。本文将详细介绍 ${ }#{ } 的区别,以便我们在实际开发中做出正确的选择。

2. 区别

2.1 变量替换

${ } 为变量替换,是首先将 SQL 语句中的 ${ } 替换成 Java 代码逻辑之后,才会将其发送给数据库执行。在这个过程中,变量的值将会被直接拼接到 SQL 语句中。

<!--示例1-->
<select id="getUserById" resultType="User">
    SELECT * FROM user WHERE 
    id = ${id}
</select>

在示例1中,${id} 将在 SQL 执行之前被替换成传入参数 id 的值。假设传入的 id 值为 1,则 SQL 语句会被替换为:

SELECT * FROM user WHERE id = 1

2.2 SQL 参数占位符

#{ } 为 SQL 参数占位符,是在 SQL 语句被发送到数据库之前,使用预编译的方式将参数传入到 SQL 语句中。

<!--示例2-->
<select id="getUserByName" resultType="User">
    SELECT * FROM user WHERE 
    name = #{name}
</select>

在示例2中,#{name} 会使用 PreparedStatement 的方式将参数 name 值传入到 SQL 语句中。整个 SQL 语句会先被预编译,参数 name 的值会被放到占位符的位置上,最后才会发送到数据库执行。

传入参数时,Mybatis 会自动进行类型转换。例如,如果传入了一个字符串类型的参数,它会自动转换为数据库中对应的数据类型。

3. 选择

在实际开发中,我们应该根据具体情况选择合适的方式。一般来说,如果 SQL 语句中传入的参数是不可预测的,那么建议使用 #{ },这样可以避免 SQL 注入等安全问题。但是如果传入的参数是可预测的,例如在 Order By 语句的参数或者在动态 SQL 中的参数,建议使用 ${ },这样可以避免 Mybatis 对传入参数进行类型转换所带来的性能消耗。

4. 总结

本文详细介绍了 Java Mybatis 中的 ${ }#{ } 的区别和使用方法,并通过示例代码演示了它们的区别和使用场景。在使用 Mybatis 进行 SQL 开发时,我们应该根据具体场景做出正确的选择,以便兼顾安全性和性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Mybatis中的 ${ } 和 #{ }的区别使用详解 - Python技术站

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

相关文章

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下面是关于“Java Spring MVC 上传下载文件配置及controller方法详解”的完整攻略,包含两个示例说明。 Java Spring MVC 上传下载文件配置及controller方法详解 在Java Spring MVC中,文件上传和下载是常见的功能。本文将介绍如何配置文件上传和下载,并提供两个示例说明。 步骤一:配置文件上传 首先,我们需要…

    Java 2023年5月17日
    00
  • Spring security如何重写Filter实现json登录

    下面是详细讲解“Spring security如何重写Filter实现json登录”的完整攻略。 什么是Spring Security? Spring Security 是一个基于 Spring 的安全框架,提供了完善的安全管理功能,能够有效地帮助我们实现安全的身份认证、授权、攻击防护等。在使用 Spring Security 的过程中,通常需要进行配置和扩…

    Java 2023年5月20日
    00
  • Java操作IO对象流进行数据的读写

    针对Java操作IO(输入/输出)对象流进行数据的读写,一般包括以下的几个步骤: 创建IO对象流(如FileInputStream、FileOutputStream等)以及处理器流(如InputStreamReader、OutputStreamWriter等) 读、写或处理流中读写的数据(如读文本文件、写二进制文件等) 关闭流以释放资源,避免内存泄漏 具体步…

    Java 2023年5月26日
    00
  • Java File类的概述及常用方法使用详解

    Java File类的概述及常用方法使用详解 File类的简介 在Java程序中,File类是用来操作文件和目录的一种标准化方法,它提供了一系列方法用来获取文件或目录的信息,以及对它们进行读写操作。File类提供了很多的方法来操作文件和目录,能够满足大多数文件和目录的基本操作需求。 File类的常用方法 File类提供了很多方法,但常用的方法主要有以下几个:…

    Java 2023年5月20日
    00
  • Velocity基本语法介绍

    Velocity基本语法介绍 Velocity是一种模板引擎,它提供了一套简单易用的模板语言,用于生成动态的Web页面、邮件等。下面是Velocity的基本语法介绍。 变量 Velocity中的变量使用${}包裹。可以将变量放置在文本、HTML标签、JavaScript代码片段等任何地方。例如: 欢迎光临${shopName}网站 ${shopName}这个…

    Java 2023年6月15日
    00
  • C#语法糖(Csharp Syntactic sugar)大汇总

    让我详细讲解“C#语法糖(Csharp Syntactic sugar)大汇总”的完整攻略。 什么是C#语法糖? C#语法糖,也称为Csharp Syntactic sugar,指的是一些C#编程语言中的语法结构,这些结构并不会让代码变得更加强大,但是却可以让代码变得更加简洁易懂。在实际编写程序时,使用C#语法糖可以提高代码可读性和可维护性。 具体的C#语法…

    Java 2023年5月19日
    00
  • 详解Junit 测试之 Spring Test

    当我们用Spring框架进行开发时,经常需要对一些业务逻辑进行测试,这就需要使用到Junit进行单元测试。而Spring Test提供了一些方便的用例和注释,来使测试更加容易和完善。本篇文章将详细讲解如何使用Junit进行Spring测试。 前置条件 在进行Spring Test的开发前,需要确保以下几项内容: 已经配置了Spring框架的依赖。 已经配置了…

    Java 2023年5月20日
    00
  • java语言图形用户登录界面代码

    Java语言构建图形用户登录界面是一项基本技能,以下是构建Java语言图形用户登录界面的完整攻略。 创建登录页面 要创建一个登录页面,需要使用Java Swing或JavaFX等GUI工具包来构建,这里以Java Swing为例。在Java Swing中,可以使用以下代码来创建一个基本的登录页面: import javax.swing.*; import j…

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