MyBatis中#{}和${}的作用与区别_陈三千的博客-CSDN博客_mybatis${}有什么用

MyBatis中#{}和${}的作用与区别

MyBatis中#{}和${}的作用与区别_陈三千的博客-CSDN博客_mybatis${}有什么用

在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,#方式能够很大程度防止SQL注入;$传入的参数在SQL中直接显示为传入的值,$方式无法防止SQL注入。

1、传入的参数在SQL中显示不同

#{} 将传入的参数(数据)在SQL中显示为字符串,会对自动传入的数据加一个双引号。
「对自动传入的数据加一个双引号」

例:使用以下SQL语句

SELECT id,name FROM student WHERE id =#{id};

//当我们传递的参数id为 "1" 时,上述 SQL 的解析为:

SELECT id,name FROM student WHERE id ="1";

${} 将传入的参数(数据)直接显示生成在SQL中

例:使用以下SQL语句

SELECT id,name FROM student WHERE id =${id};

//当我们传递的参数id为 "1" 时,上述 sql 的解析为:

SELECT id,name FROM student WHERE id =1;

2、#{}可以防止SQL注入的风险(语句的拼接);但${}无法防止SQL注入。

3、${}方式一般用于传入数据库对象,例如:表名用参数传递进SQL。

4、大多数情况下还是经常使用#{},一般能用#{}的就别用${};但有些情况下必须使用${},例:MyBatis排序时使用ORDER BY动态参数时需要注意,得用${}而不是#{}。

5、#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${};两者都是动态的向sql语句中传入需要的参数。
————————————————
版权声明:本文为CSDN博主「陈三千」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38088772/article/details/114503189

mybatis的$和#详解分析相关推荐

  1. mybatis的原理详解

    mybatis的原理详解 原理图 执行的原理图如下图所示: 配置文件分析 config.xml: <?xml version="1.0" encoding="UTF ...

  2. 封装成jar包_通用源码阅读指导mybatis源码详解:io包

    io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...

  3. MyBatis核心配置文件详解

    MyBatis核心配置文件详解 1.核心配置文件中的标签必须按照固定的顺序 2.properties标签 3.settings标签 4.typeAliases标签 5.environments标签 6 ...

  4. 如何配置Mybatis?(详解)

    如何配置Mybatis?(详解) 官网文档: https://mybatis.org/mybatis-3/zh/getting-started.html pom.xml <?xml versio ...

  5. Mybatis案例超详解

    Mybatis案例超详解 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟点理解 ...

  6. java线程的生命周期及wait(),notify(),notifyAll()的详解分析

    1.java线程的生命周期     线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)     当创建Thread类的一个实例(对象)时, ...

  7. Mybatis的特性详解——动态SQL

    Mybatis的特性详解--动态SQL 前言 一.动态sql的元素 1.MyBatis if标签:条件判断 2.MyBatis choose.when和otherwise标签 3.MyBatis wh ...

  8. 详解分析MySQL8.0的内存消耗

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 目录 1.innodb_ ...

  9. php java集成_PHP和Java 集成开发详解分析 强强联合第1/4页

    PHP和Java 集成开发详解分析 强强联合第1/4页 更新时间:2008年11月14日 12:28:23   作者: 很久以前,有人从www上看到看到天空上一个很亮的亮点,它就是Java语言,与此同 ...

最新文章

  1. 嵌入式系统自动使能alias
  2. Python入门100题 | 第024题
  3. python小数补0,python用零填充小数
  4. 机器人总动员中的小草_机器人总动员读后感
  5. 响应式禁用(Bootstrap PK AmazeUI)
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院挂号系统
  7. react在线浏览doc_如何把doc文件转换成PDF格式?教你一招秒实现
  8. 蜻蜓fm收音机电脑版_听腻了无版权的云村,不妨回归淳朴,试试这款高颜值的FM...
  9. Kinect + OpenNI + OpenCV + OpenGL 三维重建
  10. WinForm(一):开始一个WinForm程序
  11. 零跑C01/S01/C11/T03维修手册电路图培训手册用户手册技术资料
  12. 用C语言打印一个菱形图案!
  13. 基于51单片机的红外遥控电风扇
  14. 【渝粤题库】陕西师范大学202221保险学Ⅱ 作业(高起本、专升本)
  15. 谷歌为iPhone推新版本语音电话软件 北京网游分级制度今年启动(每日关注2010.1.27)
  16. 主分区损坏diskgenius_用DiskGenius(原DiskMan)修复损坏的硬盘分区
  17. shell脚本之双重循环
  18. Ceph集群显示XXX daemons have recently crashed警告
  19. Windows11打开此电脑,没有视频、图片等文件夹,解决方法
  20. 2021-07-18调度算法

热门文章

  1. 如何维持手机电池寿命_延长手机电池寿命终极技巧教学,iPhone和安卓手机皆适合...
  2. 最大流,最小费用最大流:解析 + 各种板子
  3. Codeforces Round #462 (Div. 2) C. A Twisty Movement dp + 思维转换
  4. 洛谷P3357:最长k可重线段集问题(网络流)
  5. P4127 [AHOI2009]同类分布(数位dp)
  6. priority_queue+贪心:运输(题解)
  7. P5494-[模板]线段树分裂
  8. YbtOJ#20073-[NOIP2020模拟赛B组Day6]钻石守卫【构造】
  9. jzoj1013-GCD与LCM【数论】
  10. codeforces1493 D. GCD of an Array(数论)