当前位置: 首页 > news >正文

MyBatis中#{}与${}的区别,与各自的应用场景

#{}和${}的区别:

#{}: 底层使用PreparedStatement。特点:先进行SQL语句的编译,然后给SQL语句的占位符问号?传值。可以避免SQL注入的风险。
${}:底层使用Statement。特点:先进行SQL语句的拼接,然后再对SQL语句进行编译。存在SQL注入的风险。
优先使用#{},这是原则。避免SQL注入的风险。

什么时候使用${}?

1.如果需要SQL语句的关键字放到SQL语句中,只能使用${},因为#{}是以值的形式放到SQL语句当中的。

如有的时候我们的sql语句需要使用esc与desc来决定查询结果是升序还是降序
附上两种的执行结果

#{}的执行结果:
Preparing: selectid, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carTypefrom t_car order by produce_time ?
Parameters: asc(String)selectid, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carType
from t_car order by produce_time 'asc'
${}的执行结果:
Preparing:select id, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carTypefrom t_car order by produce_time asc
Parameters:

2. 向SQL语句当中拼接表名,就需要使用${}

2. 向SQL语句当中拼接表名,就需要使用${}现实业务当中,可能会存在分表存储数据的情况。因为一张表存的话,数据量太大。查询效率比较低。可以将这些数据有规律的分表存储,这样在查询的时候效率就比较高。因为扫描的数据量变少了。日志表:专门存储日志信息的。如果t_log只有一张表,这张表中每一天都会产生很多log,慢慢的,这个表中数据会很多。怎么解决问题?可以每天生成一个新表。每张表以当天日期作为名称,例如:t_log_20220901t_log_20220902 ....你想知道某一天的日志信息怎么办?假设今天是20220901,那么直接查:t_log_20220901的表即可。

3.批量删除:一次删除多条记录。

批量删除的SQL语句有两种写法:第一种or:delete from t_car where id=1 or id=2 or id=3;第二种int:delete from t_car where id in(1,2,3);应该采用${}的方式:delete from t_car where id in(${ids});

4.模糊查询:like

第一种方案:
‘% $ {brand}%’
第二种方案:concat函数,这个是mysql数据库当中的一个函数,专门进行字符串拼接
concat(‘%’,#{brand},‘%’)
第三种方案:比较鸡肋了。可以不算。
concat(‘%’,‘${brand}’,‘%’)
第四种方案:
“%”#{brand}“%”

http://www.lryc.cn/news/68661.html

相关文章:

  • 泛型类相关
  • 一文速学数模-季节性时序预测SARIMA模型详解+Python实现
  • 二叉树与图(C++刷题笔记)
  • STM32-ADC多通道输入实验
  • javaIO流之文件流
  • DMA-STM32
  • 代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串
  • 泛型(Generic) <? extends T>,<? super T>
  • 数云融合|数字化转型中的利器:揭秘云技术的重要角色
  • Linux篇2
  • 《微服务实战》 第九章 Gitlab使用
  • KMP匹配算法
  • ClickHouse笔记: Ubuntu/Centos下的安装, 配置和用户管理
  • 网络编程——UDP编程
  • linux内核篇-进程及其调度
  • C#开发的OpenRA游戏之基地工程车执行部署命令
  • 米哈游的春招实习面经,问的很基础
  • pro如何添加定时任务
  • bgp路由策略
  • chatGPT4.0编写性能测试报告
  • jpa多线程事务
  • 加密解密软件VMProtect教程(四):准备项目之SDK功能
  • 夏令营教育小程序开发功能和优势有哪些?
  • Cocos CreatorXR 1.2.0 今日发布,正式支持 WebXR ,并开启 MR 之路
  • Linux 使用笔记(本人出品,必属精品)
  • 【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2 第二章——安装Atlas 200I DK A2跑通第一个案例
  • concurrenthashmap
  • 8年测试总结,项目/团队如何做自动化测试?效率价值?吐血整理...
  • 图像动态裁剪
  • Thematica: 炫彩主题与黑暗奇观的Vue3之旅