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)使用 ${} 时,要注意何时加或不加单引号,即 ${} 和 '${}'【注意:由于$()不加引号,所以用在字段上时需要自己额外再加上一个引号】

【#{}和${}的作用其他区别参照statement和preparestatement的编译和预编译的区别】
————————————————
版权声明:本文为CSDN博主「siwuxie095」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/siwuxie095/article/details/79190856

mybatis中的#和$的使用规范的更多相关文章

  1. mybatis 05: mybatis中的动态代理

    mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...

  2. 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...

  3. MyBatis中Mapper的返回值类型

    insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...

  4. 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

    前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...

  5. Mybatis中的连接池

    Mybatis中DataSource的存取 MyBatis是通过工厂模式来创建数据源DataSource对象的,MyBatis定义了抽象的工厂接口:org.apache.ibatis.datasour ...

  6. mybatis中xml字段空判断及模糊查询

    由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结 贴一段xml代码,如下: <if test="receivedName != null and ...

  7. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  8. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  9. 记录一次bug解决过程:mybatis中$和#的使用

    一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ...

随机推荐

  1. android studio 配置 Lombok 插件 -具体步骤

    1.前言 idea 用惯了 Lombok 插件了,好用的很,可是开发安卓 却没有,即便在 android studio 安装了插件,但是仍然无法使用 因为需要配置 2.解决 (1)进入设置,找到插件设 ...

  2. Linux上天之路(十四)之Linux数据处理

    主要内容 数据检索 数据排序 数据去重 重定向 1. 数据检索 常和管道协作的命令 – grep grep:用于搜索模式参数指定的内容,并将匹配的行输出到屏幕或者重定向文件中,常和管道协作的命令 – ...

  3. Nacos配置管理最佳实践

    Nacos一个最常用的功能就是配置中心,在具体使用时往往是多个团队,甚至整个公司的研发团队都使用同一个Nacos服务.那么使用时如何保证配置在各个团队之间的隔离,又能保证配置管理的便捷性?下面就来介绍 ...

  4. 在变压器厂中使用 ISA-95 应用程序进行调度集成

    介绍 在工业批量和连续生产/运营环境中,调度涉及将诸如罐.反应器和其他加工设备之类的资源分配给生产/运营任务.第 4 层生产/运营计划确定要制造什么产品.要制造多少产品以及何时制造.根据设备.物料.人 ...

  5. HDU 1009 FatMouse' Trade (贪心)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题目大意:肥鼠准备了 磅的猫粮,准备和看管仓库的猫交易,仓库里装有他最喜爱的食物 豆.仓库有 个 ...

  6. Typora图床

    Typora图床 Typora+PicGo+Gitee(码云)实现高效Markdown图床 typora是我最早接触的markdown格式的轻文本编辑器,因为我是计算机专业,所以平常记笔记会有代码块, ...

  7. Java对象内存模型

    2 Java对象内存模型 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 在 JVM ...

  8. CMake语法—内置变量

    目录 CMake语法-内置变量 1 CMake变量分类 1.1 普通变量 1.2 缓存变量 1.3 环境变量 1.4 内置变量 2 CMake内置变量分类 2.1 提供信息的变量 2.2 改变行为的变 ...

  9. pytest文档7-计算单元测试代码覆盖率(pytest-cov)

    pytest-cov 先命令行安装 pytest-cov 2.10.1版本 pip install pytest-cov==2.10.1 环境要求:1.python3.6.6 版本备注:其它版本没试过 ...

  10. 经典面试题:分布式缓存热点KEY问题如何解决--有赞方案

    有赞透明多级缓存解决方案(TMC) 一.引子 1-1. TMC 是什么 TMC ,即"透明多级缓存( Transparent Multilevel Cache )",是有赞 Paa ...