【Mybatis】#{}和${}的区别是什么

 

#{}是预编译处理、是占位符, ${}是字符串替换、是拼接符。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调⽤ PreparedStatement 来赋值;
Mybatis在处理${}时,会将sql中的${}替换成变量的值,调⽤ Statement 来赋值;
使⽤#{}可以有效的防⽌ SQL 注⼊, 提⾼系统安全性。
 

preparedStatement和Statement区别及联系

 

PreparedStatement和Statement都是Java中用于执行SQL语句的接口,但它们之间有一些重要的区别和联系。

区别:

  1. 预编译:PreparedStatement在执行前会先进行预编译,将SQL语句编译成二进制格式并存储在内存中,这样可以提高执行效率。而Statement则不会进行预编译,每次执行SQL语句时都需要重新解析和编译一遍,效率较低。

  2. 参数绑定:PreparedStatement支持参数绑定,可以使用占位符(?)来代替SQL语句中的参数,这样可以避免SQL注入攻击。而Statement使用的字符串拼接方式,容易受到SQL注入攻击。

  3. 执行效率:由于PreparedStatement进行了预编译和参数绑定,所以在执行相同的SQL语句时,PreparedStatement的执行效率通常比Statement更高。

联系:

  1. 继承关系:PreparedStatement是Statement的子接口,继承了Statement的所有方法。

  2. 相同的执行方法:PreparedStatement和Statement都有executeQuery()、executeUpdate()、execute()等执行SQL语句的方法,只是在使用时有些细节上的差别。

总之,PreparedStatement是一种更安全、更高效的执行SQL语句的方式,比较适用于需要执行重复的SQL语句或带参数的SQL语句。而Statement适用于执行简单的SQL语句或者只需要执行一次的SQL语句。

posted @   忱康  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示