首页 > MyBatis中#{}和${}的区别

MyBatis中#{}和${}的区别

------------------------siwuxie095

   

   

   

   

   

   

   

   

MyBatis 中 #{} 和 ${} 的区别

   

   

1、在 MyBatis 的映射配置文件中,动态传递参数有两种方式:

   

1#{} 占位符

   

2${} 拼接符

   

   

   

2#{} ${} 区别

   

1

   

1#{} 为参数占位符 ?,即 sql 预编译

   

2${} 为字符串替换,即 sql 拼接

   

   

2

   

1)#{}:动态解析 -> 预编译 -> 执行

   

2${}:动态解析 -> 编译 -> 执行

   

   

3

   

1#{} 的变量替换是在 DBMS

   

2${} 的变量替换是在 DBMS

   

   

4

   

1)变量替换后,#{} 对应的变量自动加上单引号 ''

   

2)变量替换后,${} 对应的变量不会加上单引号 ''

   

   

5

   

1#{} 能防止 sql 注入

   

2${} 不能防止 sql 注入

   

   

   

   

3、#{} 和 ${} 的实例:假设传入参数为 1

   

1)开始

   

1#{}:select * from t_user where uid = #{uid}

   

2${}:select * from t_user where uid = '${uid}'

   

   

2)然后

   

1#{}:select * from t_user where uid = ?

   

2${}:select * from t_user where uid = '1'

   

   

3)最后

   

1#{}:select * from t_user where uid = '1'

   

2${}:select * from t_user where uid = '1'

   

   

   

   

4#{} ${} 的大括号中的

   

1单个参数的情形

   

1)#{}

   

MyBatis 默认值,可任意,且与参数名无关

   

   

   

   

2${}

   

<1>使用 MyBatis 默认值 value,即 ${value}

   

   

   

   

<2>使用自定义参数名,前提:在映射器接口方法的参数前加注解 @Param("")

   

   

   

   

   

2多个参数的情形

   

1)#{}

   

<1>使用 MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 …

   

   

   

   

<2>使用自定义参数名,前提:在映射器接口方法的参数前加注解 @Param("")

   

   

   

   

2${}

   

<1>使用 MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 …

   

   

   

   

<2>使用自定义参数名,前提:在映射器接口方法的参数前加注解 @Param("")

   

   

   

   

注:@Param("")@Param(value="") 的简写

   

   

   

   

5#{} ${} 在使用中的技巧和建议

   

1)不论是单个参数,还是多个参数,一律都建议使用注解 @Param("")

   

2)能用 #{} 的地方就用 #{},不用或少用 ${}

   

3)表名作参数时,必须用 ${}。如:select * from ${tableName}

   

4)order by 时,必须用 ${}。如:select * from t_user order by ${columnName}

   

5)使用 ${} 时,要注意何时加或不加单引号,即 ${} '${}'

   

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

转载于:https://www.cnblogs.com/siwuxie095/p/8372943.html

更多相关:

  • 情况一:后台给的日期是Sat Jul 31 2021 21:50:01 GMT+0800 (中国标准时间),如果直接呈现给用户,他们一定会吐槽你不说人话~~~ 情况二:后台给的百分数是小数没有转化成00%格式 采用vue的过滤机制就可以解决这种情况,有两种方式: 第一种:全局写法,在main.js里面加入 // 【...

  • 问题描述 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入test.exe  -a 1 2       执行1+2输出3 问题分析 上面的逻辑思维很简单,但是问题在于如何在VS中向...

  •     #2.6 map()# 第一个参数传入一个函数,,第二个参数为一个可迭代对象li_1 = (1,3,5,7)def funcA(x): return x*xm1 = map(funcA,li_1)print(type(m1))print(m1())# 2.6 reduce()# 第一个参数传入一个函数,第二个参数 可以迭...

  • 列表,元组,字典的转换。 list列表是一组可变的元素集合 列表是'[]'括号组成的,[]括号包含所有元素,列表的创建可以传递字符串,也可以传递多个字符串来创建列表。如"asd", / "a","b" ... tuple元组的创建和列表一致,区别在于 元组是以'()'创建的,并且元组数据不可变。 dict字典不同于列表和元组,他...

  • nan 是not a number ,inf是无穷大 numpy.nan_to_num(x): 使用0代替数组x中的nan元素,使用有限的数字代替inf元素...

  • 简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念.Utilities Reference  演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。Graphics Reference  图形化示例展现的是 CUDA, OpenGL,...

  • 在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。...

  • 我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。 基本思路可以完全照搬参考文献[2][3] 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL...

  • 该博文整理一些在使用stl编程过程中遇到的小经验: 1.在多线程环境下面打印调试,如何使用cout及时刷新到屏幕上? 在C中我们经常这样使用: printf("Hello World "); fflush(stdout); 如果使用stl,我们可以这样使用: cout << "Hello World" << endl <...

  • select {appearance: none;/*隐藏原生select下拉框的向下箭头▼*/ }...

  • 一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssq...

  • 一、介绍   GreenPlum分布式数据仓库,大规模并行计算技术。  无共享/MPP核心架构  Greenplum数据库软件将数据平均分布到系统的所有节点服务器上,所以节点存储每张表或表分区的部分行,所有数据加载和查询都是自动在各个节点服务器上并行运行,并且该架构支持扩展到上万个节点。 混合的存储和执行(按列或按行)  Greenp...

  • from selenium.webdriver.support.ui import Select Select(d.find_element_by_id(u'key_开户行')).first_selected_option.text 转载于:https://www.cnblogs.com/paisen/p/3669272.html...

  • 我们都知道面试的时候通常都会考数据库部分的知识,所以在此整理了下我们常用的面试中常用的一些查询语句SQL,本人测试数据库为SQL Server2008 首先在数据库中建立一个测试库,此处用DavidTest代替 数据表与相应测试数据 USE [DavidTest] GO /****** Object: Table [dbo].[T...