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