首页 > 数据库 >MySQL_SQL_预编译

MySQL_SQL_预编译

时间:2022-11-24 14:22:44浏览次数:39  
标签:SQL 占位 编译 MySQL 执行 模板

预编译应该是PrepareStatement先编译后执行)(mybatis的底层原理)

SQL执行器是Statement编译并执行,完整的sql

 

Mybatis#{}${}

#{}:表示预编译(SQL预编译 – 安全的),

${}:表示占位符(仅仅做文本的替换 – 不安全的)。

 

定义

预编译是做些代码文本的替换工作。是整个编译过程的最先做的工作。

作用

防止SQL注入和SQL执行效率更高

       另:防止SQL注入(SQL注入只能对编译过程起作用):

    将SQL语句全部替换为存储过程

    MyBatis的SQL是一个具有“输入+输出”的功能,类似于函数的结构

       (防止SQL注入的原理) 

    在SQL执行前,会先将上面的SQL发送给数据库进行编译;

    执行时,直接使用编译好的SQL,替换占位符“?”就可以了

原理

SQL语句传给MySQL服务器的时候,服务器就已经帮我们编译了,编译成了一个SQL模板(可以类比函数),同时占位符“?”成了参数,当我们使用setInt()、setString()插入数据时,

高效的原因)实际上只是往SQL模板里面传入参数,这个过程编译与执行是分开的,模板被放入了模板池,当需要时取出插入数据即可,不需要继续编译。

( = SQL已编译好,再次执行时无需再编译。)

标签:SQL,占位,编译,MySQL,执行,模板
From: https://www.cnblogs.com/yzhone/p/16921708.html

相关文章

  • MySQL8.0新特性—CTE
    MySQL8支持公用表表达式,包括非递归和递归两种。公用表表达式允许使用命名的临时结果集,这是通过允许在SELECT语句和某些其他语句前面使用WITH子句来实现的。不能在同一查......
  • MySQL JDBC驱动版本与数据库版本的对应关系及注意事项
    MySQLJDBC驱动版本与数据库版本的对应关系及注意事项事情发生学了三遍的servlet,经典老师又教的第一万遍登陆注册,并且让实现,并且让演示,我们老师可能和之前的小学期公司老......
  • android studio编译错误 之 Cause: com/android/builder/profile/Recorder$Property
    Cause:com/android/builder/profile/Recorder$Property*解决方法:项目根目录中:com.android.tools.build:gradle:2.2.0'->com.android.tools.build:gradle:2.2.1'*com.and......
  • Mysql数据库笔记整理
    数据库-理论基础1.什么是数据库?数据:描述事物的符号记录,可以是数字、文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。数据库:存储数据......
  • sqlalchemy - sqlalchemy中执行原生sql - 传参方式避免了sql注入(转)
    https://blog.csdn.net/xuezhangjun0121/article/details/103993135 defget_data_all(user_id,name,start_time,end_time,page=1,limit=10):"""sqlalc......
  • postgresql 14新特性
    再说PostgreSQL14之前,先来带大家回复一下之前发布的各个版本和特性。PostgreSQL9.0:支持64位windows系统,异步流数据复制、HotStandby;PostgreSQL9.1:支持数据同步复制......
  • Sql Server 压缩数据库日志文件
    SqlServer日志_log.ldf文件太大,数据库文件有500g,日志文件也达到了500g,占用磁盘空间过大,且可能影响程序性能,需要压缩日志文件。压缩日志脚本里要填的名字从要压缩的数......
  • sql常用方法
    mysql获取某列年月日1、获取当前时间:SQL:SELECTNOW();结果:2018-04-1014:21:392、获取当前时间年份:SQL:SELECTYEAR(NOW());date_format(列明,'%Y')结果:2018(1)获取......
  • MySQL常见面试题
    1主键索引和唯一索引的区别?mysql索引有:索引类型特点1主键索引非空唯一索引,一个表只有一个主键索引。primarykey('name')2唯一索引可以有一个null值,但不......
  • [原创]借助gradle加快基于安卓开发工具开发ndk/jni编译速度
    我总是为了这个so的东西而苦逼,一直在想能不能再快一点,能不能,经过了几年的长跑,我再也忍受不了了,最近又调整优化了一下,1是因为模块化jni,导致so不会更新,因此我写了一个脚本,2......