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日

相关文章

  • 在服务器端的XSLT过程中的编码问题

    在服务器端执行XSLT转换时,遇到编码问题可能会导致输出与期望的不同。在这种情况下,以下是一些解决问题的步骤: 步骤1:确认XML文件编码和声明 XML文件需要包含字符编码声明。这通常采用以下形式: <?xml version="1.0" encoding="utf-8"?> 这里声明了使用UTF-8编码的…

    Java 2023年5月20日
    00
  • Java 字节数组类型(byte[])与int类型互转方法

    Java 字节数组类型(byte[])与int类型互转方法可以使用Java内置的ByteArrayInputStream和DataInputStream类,以及ByteArrayOutputStream和DataOutputStream类实现。下面将详细讲解这两种方法的具体实现和使用。 方法一:使用byte数组和流进行互转 byte[]类型转int类型示例 …

    Java 2023年5月26日
    00
  • 苞米豆的多数据源 → dynamic-datasource-spring-boot-starter,挺香的!

    开心一刻   2023年元旦,我妈又开始了对我的念叨   妈:你到底想多少岁结婚   我:60   妈:60,你想找个多大的   我:找个55的啊,她55我60,结婚都有退休金,不用上班不用生孩子,不用买车买房,成天就是玩儿   我:而且一结婚就是白头偕老,多好   我妈直接一大嘴巴子呼我脸上 需求背景   最近接到一个需求,需要从两个数据源获取数据,然后进…

    Java 2023年4月22日
    00
  • 使用Java实现大小写转换实例代码

    使用Java实现大小写转换可以通过常用的String类提供的方法来实现,下面是实现的完整攻略: 1. 使用toUpperCase和toLowerCase方法 Java中String类提供了两个方法来实现大小写转换,分别是toUpperCase方法和toLowerCase方法。 toUpperCase方法:将字符串中的所有字符转换为大写字母; toLowerC…

    Java 2023年5月23日
    00
  • springMVC如何将controller中Model数据传递到jsp页面

    以下是SpringMVC将Controller中Model数据传递到JSP页面的完整攻略: 1. 在Controller中添加数据到Model 在SpringMVC中,我们可以使用Model或者ModelMap来添加数据到Model中,从而传递给JSP页面。在Controller中使用如下代码添加数据: @GetMapping("/example&…

    Java 2023年6月15日
    00
  • SpringBoot LocalDateTime格式转换方案详解(前端入参)

    这里给您详细讲解一下Spring Boot中 LocalDateTime 格式转换的方案。 背景 在 SpringBoot 项目中,我们有时需要从前端请求参数里获取 LocalDateTime 类型的参数,但是前端传递过来的字符串格式不一定符合 LocalDateTime 的格式,这时就需要对这些字符串进行解析和转换。 解决方案 SpringBoot 提供了…

    Java 2023年5月20日
    00
  • java实现简单登录界面的实战过程

    Java实现简单登录界面的实战过程 在Java中,实现登录界面的方法有很多种,本文将介绍一种基础简单的方式。该方式主要是使用Java Swing库实现一个具有基本功能的用户登录界面,具体步骤如下。 前置准备 在开始之前,我们需要做一些准备工作: 安装JDK环境 了解Java Swing库的基本功能 编辑器和强大的Java IDE,如IntelliJ IDEA…

    Java 2023年5月19日
    00
  • 建议你使用LocalDateTime而不是Date哦

    当你需要在Java应用程序中使用日期和时间时,Java提供了两个主要的类:Date和LocalDateTime。但是,在开发中,建议使用LocalDateTime而不是Date,因为LocalDateTime提供了更好的灵活性和可读性。 为什么建议使用LocalDateTime? Date类在Java中存在了很长时间,不过它存在一些问题,包括: Date类的…

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