Mybatis:是一個持久層架構是用來和關系型資料庫進行互動的,java和資料庫互動使用jdbc驅動進行連接配接Mybatis對jdbc進行了封裝以便我們更加友善的使用.使用jdbc來進行資料庫互動需要建立驅動,建立連接配接connect,建立statement,參數設定,結果檢索等.Mybatis對這些進行了封裝其核心為Sqlsession會話,隻需要通過sqlsession就可以進行資料庫操作.一般sqlsession的建立我們使用sqlsessionFactory會話工廠來産生,而sqlsessionfactory的産生需要通過SqlSessionFactoryBuilder().build(inputStream),inputStream輸入流裡面是建立連接配接池所需要的參數,而這些參數是儲存在SqlMapConfig.xml中,是以我們需要通過Resources.getResourceAsStream(source)來傳入配置檔案進而産生inputstream輸入流,這樣就可以産生一個會話用來進行資料庫互動.sqlsession在互動時所需要的sql語句和參數都是用mapper.xml來進行注入的,mapper.xml是映射在sqlmapconfig.xml中的是以sqlsession可以獲得所需要的sql語句和參數.
Mybatis優化:因為會話工廠在一個程式中隻需要一個是以我們可以将會話工廠設定成單例模式是以寫成工具類友善調用
Mybatis的使用:一共有兩種方法,原始dao方法,mapper代理開發.
原始dao:
原始方法我們需要建立dao接口,并提供dao實作類并将sqlsessionfactory通過參數注入到實作類中.實作類如下:
Mapper代理: 原始dao開發中會話在進行資料庫互動時存在寫死和模闆代碼,是以為了解耦和簡化代碼我們使用mapper代理進行開發,mapper代理開發原理是隻需要接口不需要實作類将互動所需要的參數通過接口中方法的參數來進行傳入進而進行解耦和簡化代碼,而程式又是怎麼知道沒有實作類的接口中是怎麼和資料庫進行互動的是添加還是删除或者修改的并且又怎麼知道傳入的參數是什麼意思,mapper代理是通過mapper.xml來告訴程式接口中的方法幹了什麼.首先mapper.xml中的namespace的值要是該接口的全類名,這個接口中方法的方法名必須是mapper.xml中statement的id一緻,該方法的參數必須和這個statement的parameterType的參數類型一緻,該方法的傳回值類型必須和resultType的參數類型一緻這樣通過方法和statement的一一對應程式就知道該方法到底要幹什麼.
Mybatis和Spring整合:前面的兩種方法無論哪一種我們都需要手動去建立對象執行個體,這必不能完全的實作解耦和,是以我們使用spring來整合Mybatis進而将對象的執行個體化交給Spring容器去處理實作解耦合.主要是将sqlsessionfactory工廠的執行個體化交給了spring,并且将sqlsessionfactory注入到dao中.而與spring的整合也分為原始dao和mapper代理
Mybatis和hibernate的差別:
mybatis:學習成本低,入門門檻低,mybatis需要程式員自己寫sql,對sql修改和優化就比較靈活。mybatis是不完全的 ORM,mybatis需要程式員編寫sql,但是mybatis也存在映射(輸入映射、輸出映射)
hibernate:學習成本高,入門門檻高,hibernate是ORM架構,不需要程式員編寫sql,自動根據對象映射生成sql。
Mybatis和Spring整合mapper代理的配置檔案:
SqlMapConfig.xml
mapper.xml
applicationContext.xml