mybatisl中#和$區別


在mybatis接口mapper文件中引用傳入的參數是經過#{param}或者${param}來使用的。sql

至於mybatisl中#{}和${}的區別其實很簡單,可是以前一直沒有理解清楚,網上一堆錯誤的理解。因此在這裏記錄一下數據庫

其實這個問題很簡單。
mybatis

select * from t_user where name = #{param}app

使用#{}就等於使用了PrepareStatement這種佔位符的形式。能夠防止sql注入等等問題。性能

select count(*), from t_user group by ${param}spa

這種group by 字段 ,order by 字段,表名,字段名等無法使用佔位符的就須要使用${}接口



這裏展開說一下關於PrepareStatement的好處。編譯

數據庫有個功能叫綁定變量,就是針對一條sql預編譯生成多個執行計劃,若是隻是參數改變的重複sql,綁定變量則會提升很大的性能。PrepareStatement就會使用數據庫的綁定變量的功能。變量

相關文章
相關標籤/搜索