一、数据库预编译
当我们说到关于持久层框架的功能,必然需要先想想这个功能的源头到底是不是直接通过数据库提供的。实际上和事务一样,SQL 预编译的功能也是需要数据库提供底层支持的。
1、预编译SQL的用法
以 MySQL 为例,在 MySQL 中,所谓预编译其实是指先提交带占位符的 SQL 模板,然后为其指定一个 key,MySQL 先将其编译好,然后用户再拿着 key 和占位符对应的参数让 MySQL 去执行,用法有点像 python 中的 format 函数。
一个标准的预编译 SQL 的用法如下:
prepare prepare_query from 'select * from s_user where username = ?' # 提交带有占位符的参数化 SQL,也可以理解为 SQL 模板
set @name = '%王五'; # 指定一个参数
execute prepare_query using @name; # 指定参数化 SQL 的 key 和参数,让 MySQL 自己去拼接执行
先通过 prepare
设置一个 SQL 模板,然后通过 execute
提交参数,MySQL 会自行根据参数替换占位符,到最后执行的 SQL 就是:
select * from s_user where username = '%王五'