好處:
1. jdbcTemplate 是spring對 jdbc操作數據庫進行的封裝,使得開發者可以直接在java文件中 編寫sql,無需配置xml文件。
2. 簡單效率快
缺點:
1. 使用時創建連接,不使用時立即釋放。頻繁的連接開啟和關閉造成資源的浪費,影響數據庫的性能。
解決辦法:使用數據庫連接池,管理數據庫的連接。
2. 將sql硬編碼到java代碼中,如果sql修改,需要重新編譯java代碼,不利於系統的維護。
解決辦法:把sql語句定義在 xml配置文件,靜態資源
3. 在statement中的 對位符和參數設置,硬編碼到java代碼 ,
result結果集遍歷時,需要硬編碼獲取表數據的映射,不利於維護。
所以 mybatis架構解決了部分問題。對於團隊開發,快速開發更好的支持。
通過 mybatis提供的映射方式,半自動的生成sql,大部分還是需要程序員編寫sql。
核心:
輸入映射:可以將statement中的輸入參數自動輸入到映射 通過ongl表達式,
輸出映射:將查詢的結果集靈活映射成為java對象
mybatis的結構
1、 mybatis配置(兩個xml文件)
SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環境等信息(數據源,事物,mapper映射文件)。
mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。
2、 通過mybatis環境等配置信息構造SqlSessionFactory即會話工廠
3、 由會話工廠創建sqlSession即會話,操作數據庫需要通過sqlSession進行。
4、 mybatis底層自定義了Executor執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。
5、 Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id即是Mapped statement的id。
6、 Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過 Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。
7、 Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通過 Mapped Statement在執行sql后將輸出結果映射至java對象中,輸出結果映射過程相當於jdbc編程中對結果的解析處理過程。
mybatis優點:
1、 mybatis對jdbc的抽象封裝高 。spring jdbc要想實現的細節很多,例如mybatis封裝了更多的對象映射。
2、 支持注解 面對接口開發,效率高,分分鍾解決一個sql。
3、 對於復雜的SQL,springJDBC編寫麻煩,mybatis人性化點。
4、 mybatis的高度封裝,是的程序員可專注與業務層,開發效率高。所以選擇mybatis的開發公司多。