#{}是预编译处理、是占位符, ${}是字符串替换、是拼接符。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调⽤ PreparedStatement 来赋值;
Mybatis在处理${}时,会将sql中的${}替换成变量的值,调⽤ Statement 来赋值;
使⽤#{}可以有效的防⽌ SQL 注⼊, 提⾼系统安全性。
preparedStatement和Statement区别及联系
PreparedStatement和Statement都是Java中用于执行SQL语句的接口,但它们之间有一些重要的区别和联系。
区别:
-
预编译:PreparedStatement在执行前会先进行预编译,将SQL语句编译成二进制格式并存储在内存中,这样可以提高执行效率。而Statement则不会进行预编译,每次执行SQL语句时都需要重新解析和编译一遍,效率较低。
-
参数绑定:PreparedStatement支持参数绑定,可以使用占位符(?)来代替SQL语句中的参数,这样可以避免SQL注入攻击。而Statement使用的字符串拼接方式,容易受到SQL注入攻击。
-
执行效率:由于PreparedStatement进行了预编译和参数绑定,所以在执行相同的SQL语句时,PreparedStatement的执行效率通常比Statement更高。
联系:
-
继承关系:PreparedStatement是Statement的子接口,继承了Statement的所有方法。
-
相同的执行方法:PreparedStatement和Statement都有executeQuery()、executeUpdate()、execute()等执行SQL语句的方法,只是在使用时有些细节上的差别。
总之,PreparedStatement是一种更安全、更高效的执行SQL语句的方式,比较适用于需要执行重复的SQL语句或带参数的SQL语句。而Statement适用于执行简单的SQL语句或者只需要执行一次的SQL语句。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY