iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mybatis中#和$的区别
  • 914
分享到

Mybatis中#和$的区别

大数据javamybatismysql 2023-09-02 10:09:17 914人浏览 安东尼
摘要

在使用mybatis框架开发项目编写sql语句的时候,经常需要用到变量替换值,那么用来替换变量值的操作经常用到$和#这两个符号,同样在一些Java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?下面根据使用情况分析总结,两者的

在使用mybatis框架开发项目编写sql语句的时候,经常需要用到变量替换值,那么用来替换变量值的操作经常用到$和#这两个符号,同样在一些Java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?下面根据使用情况分析总结,两者的区别。


#占位符的特点

1. MyBatis处理 #{ } 占位符,使用的 JDBC 对象是PreparedStatement 对象,执行sql语句的效率更高。

2. 使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全

3. #{ } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。

$占位符的特点 

1. MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。

2. ${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。

3. ${ } 占位符中的数据是原模原样的,不会区分数据类型。

4. ${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }。


1.#和$两者含义不同

#会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。

而$则是把传入的数据直接显示在sql语句中,不会添加双引号。

比如:

 其中如果传入的username类型为字符型,比如输入zhangsan,那么username=#{username}#表示的就是username=”zhangsan”,如果传入的username类型为数值类型,比如输入11,那么username=#{username},#表示的就是username=”11”。

其中如果传入的username类型为整型类型,那么在执行sql语句时就不会出错,但是如果传入的username类型为字符串型,比如输入zhangsan,那么username=${username}就会变成username=zhangsan,执行会报错,所以sql语句必须写成下面这样。

2.两者的实现方式不同

 

(1)$作用相等于是字符串拼接

 相当于使用StringBuffer的append方法将${username}$追加在

select username,pass from t_login where username=后面,拼接在一起

(2)#作用相当于变量值替换

相当于使用PreparedStement接口来对#{username}#来进行赋值操作。

3、#和$使用场景不同

(1)在sql语句中,如果要接收传递过来的变量的值的话,必须使用#。因为使用#是通过PreparedStement接口来操作,可以防止sql注入,并且在多次执行sql语句时可以提高效率。

(2)$只是简单的字符串拼接而已,所以要特别小心sql注入问题。对于sql语句中非变量部分,那就可以使用$,比如$方式一般用于传入数据库对象(如传入表名)。

例如:

select * from ${tableName},$ 对于不同的表执行统一的查询操作时,就可以使用$来完成。

(3)如果在sql语句中能同时使用#和$的时候,最好使用#。

来源地址:https://blog.csdn.net/m0_52388979/article/details/125720091

您可能感兴趣的文档:

--结束END--

本文标题: Mybatis中#和$的区别

本文链接: https://www.lsjlt.com/news/390572.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mybatis中#和$的区别
    在使用mybatis框架开发项目编写SQL语句的时候,经常需要用到变量替换值,那么用来替换变量值的操作经常用到$和#这两个符号,同样在一些Java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?下面根据使用情况分析总结,两者的...
    99+
    2023-09-02
    大数据 java mybatis mysql
  • mybatis中的#和$的区别
    #相当于对数据 加上 双引号,$相当于直接显示数据  #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "11...
    99+
    2023-06-02
  • Mybatis——#{}和${}的区别
    在使用mybatis的时候我们会使用到#{}和${}这两个符号来为sql语句传参数,那么这两者有什么区别呢? #{}是预编译处理,是占位符,${}是字符串替换,是拼接符 Mybatis在处理#{}...
    99+
    2023-09-13
    mybatis java mysql
  • mybatis中#{}和${}的区别详解
    目录一、MyBatis中${}和#{}的区别1.1 ${}和#{}演示1.2 SQL注入问题1.3 ${}和#{}的区别1.4 #{}底层是如何防止SQL注入的?1.4.1 网上的答...
    99+
    2024-04-02
  • 【mybatis和mybatisplus的区别】
    MyBatis 和 MyBatis Plus 都是 Java 语言的持久层框架,但它们之间有以下几个区别: 功能特性: MyBatis 是一个基于 XML 配置文件和 SQL 语句的 ORM 框架,提...
    99+
    2023-09-07
    mybatis java
  • MyBatis中的#{}和${}有什么区别
    这篇文章主要介绍了MyBatis中的#{}和${}有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在MyBatis 的映射配置文件中,动态传递参数有两种方式:#{...
    99+
    2023-06-21
  • Mybatis中#和$的区别是什么
    这篇文章主要介绍“Mybatis中#和$的区别是什么”,在日常操作中,相信很多人在Mybatis中#和$的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mybatis中#和$的区别是什么”的疑惑有所...
    99+
    2023-06-22
  • MyBatis中#{}和${}有哪些区别
    目录前言#{} 和 ${} 的区别#{} 和 ${} 的实例:假设传入参数为 1实例步骤一实例步骤二实例步骤三#{} 和 ${} 的大括号中的值#{} 和 ${} 在使用中的技巧和建...
    99+
    2024-04-02
  • 详解Mybatis中javaType和ofType的区别
    目录一. 背景描述二. 情景再现1. 实体类2.BookMapper.xml映射文件3. 核心配置4. 测试代码5. 修改实体类6. 添加映射文件BookTypeMapper.xml...
    99+
    2023-05-20
    Mybatis javaType和ofType
  • mybatis中${}和#{}取值的区别分析
    mybatis作为一个轻量级的ORM框架,应用广泛,其上手使用也比较简单;一个成熟的框架,必然有精巧的设计,值得学习。 在使用mybatis框架时,在sql语句中获取传入的参数有如下...
    99+
    2024-04-02
  • MyBatis中的sqlSessionFactory和sqlSession有什么区别
    在MyBatis中,sqlSessionFactory和sqlSession是两个重要的对象,它们分别有不同的作用和功能。 sq...
    99+
    2024-04-09
    MyBatis
  • mybatis中resulttype和resultmap的区别是什么
    MyBatis中的resultType和resultMap都是用来映射查询结果的,但它们之间有一些区别: resultType:...
    99+
    2024-03-13
    mybatis
  • Mybatis中resultType和resultMap有哪些区别
    本文小编为大家详细介绍“Mybatis中resultType和resultMap有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis中resultType和resultMap有哪些区别”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-29
  • Hibernate和MyBatis的区别是什么
    这篇文章给大家分享的是有关Hibernate和MyBatis的区别是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hibernate 和 MyBatis 的区别相同点都是对j...
    99+
    2024-04-02
  • MyBatis ofType和javaType的区别说明
    目录ofType和javaType的区别MyBatis笔记 javatype和ofTypeofType和javaType的区别 JavaType和ofType都是用来指定对象类型的,...
    99+
    2024-04-02
  • 一篇文章弄懂Mybatis中#和$的区别
    目录前言一:下面我们写个关于“#”的个sql,看能不能注入。1.正常传参2.拼接传参二:下面我们写个关于“$”的个sql,看能不能注入。1.正常传参2.拼接传参总结前言 在学校的时候...
    99+
    2024-04-02
  • mybatis createcriteria和or的区别说明
    createcriteria和or的区别 mybatis generator插件生成的example中,有createcriteria和or方法,他们有什么区别呢? 通过源码,能很清...
    99+
    2024-04-02
  • mybatis和jdbc的区别是什么
    MyBatis 和 JDBC 都是用于在 Java 应用程序中访问数据库的工具,但它们之间有一些重要的区别: ORM 框架 vs...
    99+
    2024-03-07
    mybatis jdbc
  • mybatis collection和association的区别解析
    目录1.collection标签1.1 相关代码和运行结果1.2 collection部分源码解析1.3 <collection>和<association>...
    99+
    2024-04-02
  • Hibernate和MyBatis有哪些区别
    这篇文章主要介绍“Hibernate和MyBatis有哪些区别”,在日常操作中,相信很多人在Hibernate和MyBatis有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作