在mybatis為持久化的java框架中,mapper和xml文件映射的sql,有時在實際執行時會很慢,甚至一直查詢不出來,調查發現原因有二:
1.參數化寫法不同,執行邏輯不同。例如:#{param},${'param'}
#符號標記的參數,在mybatis執行sql時,使用PreparedStatement對象,包含預編譯sql操作,能防止sql注入安全問題,單次執行不如Statement,批量執行時能提高效能;
$符號標記的參數,在mybatis執行sql時,使用Statement對象,不包含預編譯操作,直接拼裝sql語句成string執行,無法避免sql注入,單次執行速度快;
這兩種方式優缺點互為,一般建議使用#{param},但在實際項目中,如果只有單次的sql操作,在不影響安全的前提下,可以使用${'param'}方式
注:#{param}參數化到sql會自動為param加引號,${'param'}方式不會,所以調用${'param'}需要在括號中加引號,也由於這種特性,一般參數化select,table等sql標簽用$方式,避免自動加入引號
2.sql語句大小寫替換
同事提供,本來項目中為了圖方便都是小寫sql語句,替換小寫語句為大寫也能提高一些sql執行速度,待實驗