mybatis的動態sql
發布時間: 2023-10-10 06:58:45
⑴ mybatis 中 #{} 和 ${} 的區別及應用場景
動態 sql 是 mybatis 的主要特性之一,在 mapper 中定義的參數傳到 xml 中之後,在查詢之前 mybatis 會對其進行動態解析。
mybatis 為我們提供了兩種支持動態 sql 的語法:#{} 以及 ${} 。
如: #{} : 根據參數的 類型 進行處理,比如傳入String類型,則會為參數加上雙引號。#{} 傳參在進行SQL預編譯時,會把參數部分用一個佔位符 ? 代替,這樣可以防止 SQL注入。
如: ${} : 將參數取出不做任何處理,直接放入語句中,就是簡單的字元串替換,並且該參數會參加SQL的預編譯,需要手動過濾參數防止 SQL注入。
因此 mybatis 中優先使用 #{};當需要動態傳入 表名或列名 時,再考慮使用 ${} 。
正確的寫法應該是使用 ${order_by},這樣解析後就是一個列名,然後才能對數據進行排序,已達到業務需求。
⑵ mybatis中動態sql執行原理
解釋器模式: 初始化過程中構建出抽象語法樹,請求處理時根據參數對象解釋語法樹,生成sql語句。
工廠模式: 為動態標簽的處理方式創建工廠類(SqlTagHandlerFactory),根據標簽名稱獲取對應的處理方式。
策略模式: 將動態標簽段銷明處理方式抽象為介面,針對不同標簽有相應的握告實現類。解釋抽象語法樹斗含時,定義統一的解釋流程,再調用標簽對應的處理方式完成解釋中的各個子環節
熱點內容