鄭州正規(guī)網(wǎng)站設(shè)計(jì)價(jià)格seo門戶
MyBatis的基本概念
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄
MyBatis的特點(diǎn)
- 簡單易學(xué):本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個(gè)jar文件+配置幾個(gè)sql映射文件。易于學(xué)習(xí),易于使用。通過文檔和源代碼,可以比較完全的掌握它的設(shè)計(jì)思路和實(shí)現(xiàn)。
- 靈活:mybatis不會對應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響。 sql寫在xml里,便于統(tǒng)一管理和優(yōu)化。通過sql語句可以滿足操作數(shù)據(jù)庫的所有需求。
- 解除sql與程序代碼的耦合:通過提供DAO層,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問邏輯分離,使系統(tǒng)的設(shè)計(jì)更清晰,更易維護(hù),更易單元測試。sql和代碼的分離,提高了可維護(hù)性。
- 提供映射標(biāo)簽,支持對象與數(shù)據(jù)庫的ORM字段關(guān)系映射。
- 提供對象關(guān)系映射標(biāo)簽,支持對象關(guān)系組建維護(hù)。
- 提供xml標(biāo)簽,支持編寫動態(tài)sql
MyBatis架構(gòu)
我們把MyBatis架構(gòu)分為三層
- API接口層的主要作用
- 定義接口方法:API接口層主要用于定義與數(shù)據(jù)庫交互的方法。通常,每個(gè)接口方法對應(yīng)一條SQL語句或一組相關(guān)的SQL語句,用于執(zhí)行查詢、插入、更新或刪除等數(shù)據(jù)庫操作
- 參數(shù)傳遞:API接口層可以定義方法的輸入?yún)?shù),用于傳遞查詢條件、更新數(shù)據(jù)等操作所需的參數(shù)。MyBatis提供了各種方式來傳遞參數(shù),包括基本類型、對象、Map等。
- 結(jié)果映射:API接口層可以定義方法的返回類型,用于接收數(shù)據(jù)庫操作的結(jié)果。MyBatis支持將查詢結(jié)果映射為Java對象或集合,并提供了豐富的結(jié)果映射規(guī)則和配置方式。
- SQL語句映射:API接口層可以通過注解或XML配置的方式,將SQL語句與接口方法進(jìn)行映射。這樣,在調(diào)用接口方法時(shí),MyBatis會自動執(zhí)行對應(yīng)的SQL語句,并將結(jié)果返回給調(diào)用方。
- 事務(wù)支持:API接口層可以通過注解或XML配置的方式,添加事務(wù)的支持。這樣,在接口方法執(zhí)行期間,可以保證數(shù)據(jù)庫操作的原子性,保證數(shù)據(jù)的一致性和完整性。
- 數(shù)據(jù)處理層的主要作用
- 定義映射關(guān)系:數(shù)據(jù)處理層使用映射文件或注解來定義數(shù)據(jù)庫表與Java實(shí)體對象的映射關(guān)系。這些映射關(guān)系包括表名、字段名、主鍵、關(guān)聯(lián)關(guān)系等。通過定義映射關(guān)系,MyBatis可以將查詢結(jié)果自動映射為Java對象。
- 編寫SQL語句:數(shù)據(jù)處理層使用SQL語句來執(zhí)行數(shù)據(jù)庫的增刪改查操作。SQL語句可以使用MyBatis提供的映射文件或注解來定義,也可以使用動態(tài)SQL來實(shí)現(xiàn)靈活的條件查詢。SQL語句可以包括普通的SQL語句、參數(shù)占位符、動態(tài)條件等。
- 執(zhí)行數(shù)據(jù)庫操作:數(shù)據(jù)處理層使用Mapper接口來執(zhí)行數(shù)據(jù)庫操作。Mapper接口定義了與數(shù)據(jù)庫操作相關(guān)的方法,例如插入數(shù)據(jù)、更新數(shù)據(jù)、刪除數(shù)據(jù)、查詢數(shù)據(jù)等。通過調(diào)用Mapper接口的方法,可以執(zhí)行對應(yīng)的SQL語句并返回結(jié)果
- 事務(wù)管理:數(shù)據(jù)處理層可以通過注解或配置文件來管理事務(wù)。在需要保證多個(gè)數(shù)據(jù)庫操作的原子性時(shí),可以使用事務(wù)管理來確保數(shù)據(jù)的一致性和完整性。MyBatis提供了多種方式來配置和管理事務(wù),例如使用注解、使用AOP、使用XML配置等。
- 基礎(chǔ)支撐層的主要作用
- 數(shù)據(jù)源管理:基礎(chǔ)支撐層負(fù)責(zé)管理應(yīng)用程序連接數(shù)據(jù)庫的數(shù)據(jù)源。它可以配置和管理連接池,提供數(shù)據(jù)庫連接的分配和釋放,以及數(shù)據(jù)庫事務(wù)的管理等。
- SQL語句執(zhí)行:基礎(chǔ)支撐層提供了執(zhí)行SQL語句的能力。它負(fù)責(zé)將SQL語句和參數(shù)傳遞給數(shù)據(jù)庫,并獲取執(zhí)行結(jié)果。它還負(fù)責(zé)處理SQL語句的預(yù)編譯、占位符替換、結(jié)果集的映射等操作。
- 對象-關(guān)系映射:基礎(chǔ)支撐層負(fù)責(zé)將數(shù)據(jù)庫中的記錄映射為Java對象。它可以根據(jù)配置或注解,自動將查詢結(jié)果集映射為Java對象,并提供對象與數(shù)據(jù)庫記錄之間的轉(zhuǎn)換功能。
- 緩存管理:基礎(chǔ)支撐層提供了緩存機(jī)制,用于提高數(shù)據(jù)庫訪問性能。它可以緩存查詢結(jié)果,避免重復(fù)訪問數(shù)據(jù)庫,提高響應(yīng)速度。MyBatis提供了不同級別的緩存配置,包括一級緩存和二級緩存。
- 異常處理:基礎(chǔ)支撐層處理數(shù)據(jù)庫操作過程中可能出現(xiàn)的各種異常,如數(shù)據(jù)庫連接異常、SQL語句執(zhí)行異常、事務(wù)回滾等。它負(fù)責(zé)將異常轉(zhuǎn)換為可讀的錯(cuò)誤信息,并提供異常處理機(jī)制。
MyBatis核心組件
- SqlSessionFactory:SqlSessionFactory是MyBatis的核心接口之一,它負(fù)責(zé)創(chuàng)建SqlSession對象。SqlSession是與數(shù)據(jù)庫交互的主要入口,通過SqlSessionFactory可以獲取SqlSession實(shí)例,然后進(jìn)行數(shù)據(jù)庫操作。
- SqlSession:SqlSession是MyBatis與數(shù)據(jù)庫交互的關(guān)鍵組件,它提供了執(zhí)行SQL語句、獲取映射器(Mapper)、管理事務(wù)等功能。通過SqlSession,可以執(zhí)行數(shù)據(jù)庫的增刪改查操作,并獲取操作結(jié)果。
- SqlSession:SqlSession是MyBatis與數(shù)據(jù)庫交互的關(guān)鍵組件,它提供了執(zhí)行SQL語句、獲取映射器(Mapper)、管理事務(wù)等功能。通過SqlSession,可以執(zhí)行數(shù)據(jù)庫的增刪改查操作,并獲取操作結(jié)果。
- 映射器(Mapper):映射器是MyBatis實(shí)現(xiàn)動態(tài)代理的核心組件。MyBatis通過JDK動態(tài)代理或CGLIB動態(tài)代理,根據(jù)定義的Mapper接口,動態(tài)生成代理類,實(shí)現(xiàn)接口方法的具體邏輯。通過映射器,可以將Java對象與數(shù)據(jù)庫記錄進(jìn)行映射,實(shí)現(xiàn)對象關(guān)系映射。
- Configuration配置對象:Configuration對象是MyBatis的配置文件解析和存儲的核心組件。它負(fù)責(zé)解析MyBatis的配置文件,包括數(shù)據(jù)庫連接信息、映射文件路徑、插件、類型處理器等配置信息。MyBatis根據(jù)Configuration對象的配置,完成MyBatis的初始化和功能擴(kuò)展。
- Executor執(zhí)行器:Executor執(zhí)行器是MyBatis執(zhí)行SQL語句的核心組件。它負(fù)責(zé)根據(jù)SQL語句、參數(shù)和映射規(guī)則,將SQL語句發(fā)送到數(shù)據(jù)庫,并獲取結(jié)果。Executor可以分為SimpleExecutor、ReuseExecutor和BatchExecutor等類型,用于不同的場景和需求。