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 @ 2022-11-24 14:14  yzhone  阅读(236)  评论(0)    收藏  举报