解讀Mybatis資料庫開發框架
SSM開發框架的M就是Mybatis,Mybatis可以幫助開發人員更加方便地操作資料庫,減少開發人員在資料庫操作方面的編碼工作量。下圖是整合到Spring框架的Mybatis技術架構圖。
圖 1 整合到Spring框架的MyBaits技術
上圖是整合到Spring框架的MyBaits技術架構圖。架構圖分為兩部分:虛線框外的是Spring框架的業務邏輯處理類,它呼叫Mybatis的DAO介面發起對資料庫的增刪改查請求;虛線框內的是Mybatis框架部分,這部分包括DAO介面、DAO介面實現類Mapper、POJO實體類、SQL執行Executor類、SqlSession類。
一個使用者登入業務訪問資料庫流程如下:使用者通過JSP填寫登入賬號和密碼後,JSP會發送登入請求到指定的Controller類,Controller類收到請求後,會呼叫登入業務類(Service類),登入業務類呼叫DAO類的登入介面,因為該介面被Mapper類實現,因此Mapper類的登入SQL程式碼會被執行,真正執行SQL程式碼的是Executor類,它建立SqlSession物件,由SqlSession物件訪問資料庫的使用者表,並將訪問結果返回給Mapper,Mapper類會根據介面的返回型別返回資料到登入業務類。
DAO介面聲明瞭訪問資料庫的具體操作方法,在不對外暴露資料庫訪問細節的前提下提供資料庫的增刪改查方法,它不負責增刪改查方法的具體實現,方法的具體實現由Mapper負責。這樣做的好處時當資料庫訪問細節發生變化時,不會影響到業務邏輯類的改動。例如,當資料庫訪問細節發生變化時,只需修改Mapper程式碼就可以了,而Mapper程式碼是XML檔案,因此無需重新編譯整個系統。假如實現細節放在DAO類中,就需要修改DAO類的程式碼,修改DAO類的程式碼顯然會影響到Service類的程式碼,即使沒有影響,也需要重新編譯整個系統。DAO介面由MyBaits自動生成,無需手動編寫DAO介面程式碼。
Mapper是DAO的實現類,Mapper不是Java類,而是一個XML檔案,訪問資料庫的SQL語句都是在Mapper中實現的,這些Mapper程式碼不需要你手動編寫,完全由MyBaits自動生成。
POJO是實體類,主要是需要資料傳遞和序列化的類。例如與資料庫表對應的Java類。POJO類也不需要手動編寫程式碼,POJO類完全由MyBaits自動生成。
Exectuor類是執行SQL語句的類,Mapper所有的SQL語句都通過Exectuor類來執行,Exectuor類會建立一個SqlSession完成對資料庫的操作。
Mybatis簡單體現在開發人員建立資料庫後,可以使用Mybatis自身提供的外掛自動生成上圖虛線框中的DAO介面類、Mapper實現類、POJO實體類的程式碼,開發人員不需要手動編寫這些程式碼。只有在特殊SQL查詢需求的情況下,才會擴充套件這些程式碼。下圖是Mybatis程式碼自動生成原理圖。
圖2 Mybaits程式碼自動生成原理圖
Mybatis程式碼自動生成外掛需要從配置檔案中讀取資料庫的訪問地址、登入賬號和密碼,還需要從配置檔案中讀取資料庫的哪些表需要生成POJO類、DAO介面類和Mapper實現類,以及這些類儲存到什麼位置。
圖 3 Mybaits程式碼自動生成配置檔案
前面介紹了Mybatis的框架結構和資料庫操作程式碼自動生成機制,瞭解了Mybatis和Spring框架的整合。在後面的人脈系統設計中,我們會用到這些知識。