天天看點

Mybatis 與 JDBC 程式設計的比較 及#{}與${}的差別

1.資料庫連結建立、釋放頻繁造成系統資源浪費進而影響系統性能,如果使用資料庫連結池可解決此問題。

解決:

在 SqlMapConfig.xml 中配置資料連結池,使用連接配接池管理資料庫連結。

2.Sql 語句寫在代碼中造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變 java 代碼。

解決:

将 Sql 語句配置在 XXXXmapper.xml 檔案中與 java 代碼分離。

3.向 sql 語句傳參數麻煩,因為 sql 語句的 where 條件不一定,可能多也可能少,占位符需要和參數對應。

解決:

Mybatis 自動将 java 對象映射至 sql 語句,通過 statement 中的 parameterType 定義輸入參數的類型。

4.對結果集解析麻煩,sql 變化導緻解析代碼變化,且解析前需要周遊,如果能将資料庫記錄封裝成 pojo 對象解析比較友善。

解決:

Mybatis 自動将 sql 執行結果映射至 java 對象,通過 statement 中的 resultType 定義輸出結果的類型。

#{}表示一個占位符号

通過#{}可以實作 preparedStatement 向占位符中設定值,自動進行 java 類型和 jdbc 類型轉換,

#{}可以有效防止 sql 注入。 #{}可以接收簡單類型值或 pojo 屬性值。 如果 parameterType 傳輸單個簡單類

型值,#{}括号中可以是 value 或其它名稱。

${}表示拼接 sql 串

通過${}可以将 parameterType 傳入的内容拼接在 sql 中且不進行 jdbc 類型轉換, ${}可以接收簡

單類型值或 pojo 屬性值,如果 parameterType 傳輸單個簡單類型值,${}括号中隻能是 value。