尤德華 翟高粵


摘 要:MyBatis是當今流行的ORM開發框架,它能解決大部分企業數據庫應用開發的復雜性問題。對于Java開發人員來說,掌握ORM框架的基本使用,已是入職Java軟件開發行業的必備技能之一。本文主要介紹MyBatis框架及其體系結構的基本內容及應用,并通過一個實例說明MyBatis框架的基本使用方法,以面向對象的方式來操作持久化對象,通過ORM框架的映射關系把面向對象的操作轉換成底層的SQL操作。
關鍵詞:MyBatis框架;ORM;對象關系映射;數據庫編程
一、引言
MyBatis是當前主流的Java持久層框架之一,它是一種ORM框架,它的性能優異,具有高度的靈活性、可優化性和易于維護等特點,受到了廣大互聯網企業的青睞,是目前大型互聯網項目的首選框架。MyBatis 的主要思想是將程序中的大量 SQL 語句剝離出來,使用 XML 文件或注解的方式實現 SQL 的靈活配置,將 SQL 語句與程序代碼分離,在不修改程序代碼的情況下,直接在配置文件中修改 SQL 語句。
二、相關理論
(一)ORM與MyBatis
MyBatis是一個支持普通SQL查詢、存儲過程以及高級映射的持久層框架,它消除了幾乎所有的JDBC代碼和參數的手動設置以及對結果集的檢索,并使用簡單的XML或注解進行配置和原始映射,用以將接口和Java的POJO映射成數據庫的記錄,使得Java開發人員可以使用面向對象的編程思想來操作數據庫。
MyBatis框架也被稱為ORM框架。所謂ORM就是一種為了解決面向對象與關系型數據庫中數據類型不匹配的技術,它通過描述Java對象與數據庫表之間的映射關系,自動將Java應用程序中的對象持久化到關系型數據庫的表中。ORM框架的工作原理如圖1所示。
從圖1可以看出,使用ORM框架后,應用程序不再直接訪問底層數據庫,而是以面向對象的方式來操作持久化對象,而ORM框架則會通過映射關系將這些面向對象的操作轉換成底層的SQL操作。另外,MyBatis還可以配置動態SQL并優化SQL,可以通過配置決定SQL的映射規則,對于一些復雜的和需要優化性能的項目來說,使用MyBatis更加合適。
(二)MyBatis的工作原理
MyBatis的工作原理詳見圖2所示。從圖2可以看出,MyBatis框架在操作數據庫時,大體經過了8個步驟。
(1)讀取MyBatis配置文件mybatis-congfig.xml文件,該文件作為MyBatis的全局配置文件,配置了MyBatis的運行環境等信息,其中主要內容是獲取數據庫連接。
(2)加載映射文件Mapper.xml,該文件配置了操作數據庫的SQL語句,但需要在mybatis-congfig.xml中加載才能執行,可以加載多個配置文件,每個配置文件對應數據庫中的一張表。
(3)構建會話工廠,通過MyBatis的環境等配置信息構建會話工廠SqlSessionFactory。
(4)創建SqlSession對象,由會話工廠創建SqlSession對象,該對象中包含了執行SQL的所有方法。
(5)MyBatis底層定義了一個Executor接口來操作數據庫,它會根據SqlSessionFactory傳遞的參數動態地生成需要執行的SQL語句,同時負責查詢緩存的維護。
(6)在Executor接口的執行方法中,包含一個MappedStatement類型的參數,該參數是對映射信息的封裝,用于存儲映射的SQL語句的id、參數等。
(7)輸入參數映射。
(8)輸出結果映射。
三、MySql數據庫
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
MySQL是一種關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型和大型網站的開發都選擇MySQL作為網站數據庫。
MySQL和MyBatis進行配合使用,兼容性好,開發效率高。
四、ORM編程實例
下面以一個查詢實例來說明MyBatis的編程步驟。在許多項目的實際開發中,單條數據的簡單查詢經常被涉及。單條數據查詢的性質是精確查詢,接下來本文以一系列步驟的形式來說明如何使用MyBatis框架根據客戶編號查詢客戶信息。
根據客戶編號查詢客戶信息主要是通過查詢客戶表中的主鍵來實現的。
(1)在MySQL數據庫中,創建一個名為mybatis的數據庫,在此數據庫中創建一個t_customer表,同時預先插入幾條數據。
(2)在MyEclipse中,創建一個名為firstMyBatis的Web項目,將MyBatis的核心JAR包、lib目錄中的依賴JAR包,以及MySQL數據庫的驅動JAR包一同添加到項目lib目錄下,并發布到類路徑中。
(3)編輯MyBatis的log4j輸出日志信息文件,通過該文件可以在控制臺輸出SQL語句。
(4)在src目錄下,創建一個com.itheima.po包,在該包下創建持久化類Customer,并在類中聲明id、username、jobs和phone屬性,及其對應的getter和setter方法。
(5)在src目錄下,創建一個com.itheima.mapper包,并在包中創建映射文件CustomerMapper.xml,部分核心代碼如下。
<!--根據客戶編號獲取客戶信息 -->
(6)在src目錄下,創建MyBatis的核心配置文件mybatis-config.xml,部分核心代碼如下。
<!--1.配置環境 ,默認的環境id為mysql-->
<!--1.2.配置id為mysql的數據庫環境 -->
<!-- 使用JDBC的事務管理 -->
<!--數據庫連接池 -->
value="jdbc:mysql://localhost:3306/mybatis" /> <!--2.配置Mapper的位置 --> (7)在src目錄下,創建一個com.itheima.test包,在該包下創建測試類MyBatisTest,并在類中編寫測試方法findCustomerByIdTest(),核心代碼如下。 // 1、讀取配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 2、根據配置文件構建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 3、通過SqlSessionFactory創建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 4、SqlSession執行映射文件中定義的SQL,并返回映射結果 Customer customer = sqlSession.selectOne("com.itheima.mapper" + ".CustomerMapper.findCustomerById", 1); // 打印輸出結果 System.out.println(customer.toString()); // 5、關閉SqlSession sqlSession.close(); 五、結論 本文首先對MyBatis框架的概念、特點和下載使用進行了描述說明,然后對MyBatis框架的工作原理進行了流程分析,最后通過一個簡單的查找實例來演示MyBatis框架的基本使用。通過本文的學習,可以了解MyBatis的概念和作用,熟悉MyBatis的工作原理,并能使用MyBatis框架來完成基本的數據庫操作。 參考文獻: [1]沃爾斯. Spring實戰 [M]. 人民郵電出版社,2016. [2]卡內爾. Spring開發三劍客[M],人民郵電出版社, 2020. [3] 陳恒等. Spring Boot從入門到實戰[M]. 清華大學出版社出版社,2020.