1.1 mybatis介紹
mybatis原名是ibatis,是apache的開源項目。ibatis改成mybatis不僅僅是名稱的改變,mybatis在功能上也有升級。
mybatis是一個持久層的框架,mybatis框架和關係數據庫進行交互,將數據持久化到關係數據中。
mybatis目前 在github(https://github.com/mybatis/mybatis-3/releases)託管。
java中通過jdbc對數據庫,jdbc是一套數據庫訪問接口。mybatis持久層框架對jdbc的封裝。
mybatis需要程序員自己編寫sql,對於一些ORM框架(對象關係映射)一般是不需要程序員來編寫sql。
mybatis的重點讓程序員自己去靈活掌握sql,要對 sql進行優化比較容易讓程序員自己掌握。
mybatis同時也對jdbc訪問數據庫的過程 進行了封裝,對創建connection、創建statement、手動設置參數、結果集檢索等進行封裝。
mybatis可以通過 xml或註解(不推薦)將statement進行配置,主要完成兩個重要核心 功能:
1、輸入映射,將java對象映射到statement中即sql語句的輸入參數。
2、輸出映射,將sql語句執行的結果映射成java對象。
單獨使用jdbc編程中問題總結
目的:
1、mybatis等持久層框架都是對jdbc的封裝,爲了更好的去學習mybatis,對單獨使用jdbc編程中問題進行總結。
2、企業開發中要進行技術選型,對於小型 的項目來說,單獨使用jdbc或對 jdbc簡單的封裝也在技術選型範圍考慮之內。企業在技術選型主要考慮人力資源等,以節省成本及創建利益最大化爲目標。
問題總結:
1、程序中存在硬編碼(數據驅動加載,創建數據連接、sql語句),不利於系統維護。
設想解決硬編碼:可以sql語句等信息配置在xml中。
2、數據庫連接使用時打開不時立即關閉,頻繁開關連接對數據庫資源是一種浪費。
設想解決方案:使用數據庫連接池。
3、向preparedStatement設置參數時 將參數下標 號(從1開始)硬編碼在代碼,並且將向佔位符號設置的參數也硬編碼了。
設想解決方案:可以自動通過程序將java類型對象映射到preparedStatement中。(輸入參數)
4、從Resultset中取出結果集進行遍歷,將列名硬編碼
設想解決方案:可以自動通過程序將sql查詢結果集映射到時java對象中,自動完成將sql查詢的列值構造成一個java對象。(輸出參數)
mybatis框架原理
1、SqlMapConfig.xml,mybatis全局配置文件,名稱不固定的。
配置了:數據源、事務等運行環境,最重要的是配置mybatis運行所需要的一些配置(Mapper.xml映射配置、全局運行參數、別名。。。)
mybatis運行先找SqlMapConfig.xml,由SqlMapConfig.xml找Mapper.xml映射配置。
Mapper.xml:mybatis的映射文件,配置了sql語句及sql 語句輸入參數類型、及sql語句結果集所映射的類型
在mapper.xml中配置了statement(支持各種statement)了。
2、SqlSessionFactory,通過SqlMapconfig.xml等配置文件構造 一個會話工廠對象,要操作數據庫通過SqlSessionFactory創建SqlSession會話。
作用:創建SqlSession會話
3、SqlSession,mybatis操作數據庫使用的會話接口,定義了操作數據庫方法(添加、刪除、修改、更新)
SqlSession是一個接口,是一個面向程序員的接口。
4、Executor,是一個接口,是一個操作數據庫的底層接口,其實現類有基本執行器、緩存執行器兩種
SqlSession需要通過Executor操作數據庫。
5、MappedStatement mybatis底層封裝對象,封裝了sql語句、輸入參數類型、輸出結果類型等信息