MySQL_SQL_预编译

预编译应该是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已编译好,再次执行时无需再编译。

posted @   yzhone  阅读(203)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示