Mybatis通過(guò)XML或注解將SQL語(yǔ)句與(yu)Java對象映射,工作(′_`)執行時(shí)先加載配置,原理創(chuàng )建會(huì )(hui)話(huà),和操然后通過(guò)會(huì )話(huà)執行SQL語(yǔ)句,作?步驟最后返回結果。工作
MyBatヽ(′▽?zhuān)?/is 是原理一個(gè)優(yōu)秀的持久層框(′▽?zhuān)?架,它支持定制化 SQL、和操存儲過(guò)程以及高級映射,作步驟MyBatis 避免了幾乎所有的工(?⊿?)作 JDBC 代碼和手動(dòng)設??置參數以及獲取結果集,MyBatis 可以使用(yong)簡(jiǎn)單的原理 XML 或注解來(lái)配置和映射原生類(lèi)型、接口和 Java 的和操 POJO(Plain Old Java Object(╯°□°)╯s,普通的作步驟 Java 對象)為數據庫中的記錄。
以下是工作 MyBatis 工作原理的簡(jiǎn)述:
MyBatis 工作流程
1、讀取配置文件: MyBatis 在啟動(dòng)時(shí)會(huì )加載配置文件(mybatis-config.xml),原理這個(gè)文件包含了對其他映射文件的和操引用以及其(qi)他一些配置信息,??如事務(wù)管理器、別名等。
2、創(chuàng )建會(huì )話(huà)工廠(chǎng): 根據配置文ヽ(′ー`)ノ件,MyBatis 會(huì )創(chuàng )建(′▽?zhuān)?)一(??ヮ?)?*:???個(gè)(ge)會(huì )話(huà)工廠(chǎng)(′?`)(SqlSessionFactory),它是創(chuàng )建 SqlSessi(′?`)on 的工廠(chǎng)類(lèi),SqlSession 是執行 SQL 命令的主要接口。
3、創(chuàng )建會(huì )話(huà): 通過(guò)會(huì )話(huà)工廠(chǎng)可以獲取??一個(gè) Sq??lSession 實(shí)例,SqlSession 提供了多種方法來(lái)執行 SQL 語(yǔ)句,包括直接執行 SQL 語(yǔ)句和通過(guò)映射器(?⊿?)執行 SQ(???)L。
4、編寫(xiě)映射?器: 映射器(Mapper)是 MyBatis 最核心的部分,它定義了 SQL 語(yǔ)句和 Java 方法之間的映射關(guān)系,這些映射器可以是 XML 文件或者注解。
5、執行 SQL: 當調用 SqlSession 的方法時(shí),MyBatis 會(huì )根據映射器的定義找到對應的(╥_╥) SQL 語(yǔ)句,然后執行該 SQL 語(yǔ)句。
6、處理結果: MyBatis 將 SQL 執行的結果集自動(dòng)映射到 Java 對象中,并將這些對象返回給用戶(hù)。
7、提交或回滾事務(wù): 如果配置了事務(wù),在操作完成后可以選擇提交或(huo)回滾事務(wù)。
8、關(guān)閉會(huì )話(huà): 完成所有操作(zuo)后,關(guān)閉 SqlSession,釋放??資源。
MyBatis 映射器
映射器是 MyBati??s 中非(′_`)常重要的概念,它允許你將 SQL 語(yǔ)句和 Java 方法關(guān)聯(lián)起來(lái),映??射器可以是 XML 文件,也可以是使用 Jav(°o°)a 注解的??方式,在 XML 映射文件中,你可以??編寫(xiě)以下內容:
<select>: 用于定(ding)義查詢(xún)語(yǔ)句。
<insert>: 用于定義插入語(yǔ)句。
<(′▽?zhuān)?)update>: 用于定義更新語(yǔ)句。
<delete>: 用于定義刪除語(yǔ)句。
<resultMap>: 用于定義結果集的映射規則。
M??yBatis 緩存機制
一級緩(′_`)存: 也稱(chēng)為會(huì )話(huà)緩存,它是默認開(kāi)啟的,在同一個(gè)會(huì )話(huà)中,相同的查詢(xún)語(yǔ)句只會(huì )被執行一次,之后就會(huì )從緩存中獲取結果。
二級緩存: 也稱(chēng)為全(quan)局緩存,它可以跨會(huì )話(huà)共享數據,需要手動(dòng)配置并指定哪些包或類(lèi)需要使用二級緩存。
MyBat(′▽?zhuān)?is 提供??了一個(gè)強大的插件系統,允許用戶(hù)自定義插件來(lái)攔截和修改 MyBatis 的核心行為,可(′;д;`)以實(shí)(shi)現自定義的緩存插件、性能分析插件等。
相關(guān)問(wèn)題與解答
Q1: MyBatis 如何實(shí)(shi)現結果集的映射?
A1: MyBatis 通過(guò)配置映射器(XML 文件或注解)來(lái)定義結果集??和 Java(′?`) 對象之(′_ゝ`)間的映射關(guān)系,使用 <resultMap> 元素來(lái)描述如何從數據庫結果集中加載對象圖(tu)。
Q2: MyBatis 的一級緩存和二級緩存有什么區┐(′?`)┌別?
A2: 一級緩存是會(huì )話(huà)級別的緩存,只在同一個(gè)會(huì )話(huà)中有效,??當會(huì )話(huà)結束時(shí)緩存失效,二級緩存是全局級別的緩存,可以跨會(huì )話(huà)共享數據,需要手動(dòng)配置。
Q3: 如何在 MyBa(╯‵□′)╯tis 中使用動(dòng)態(tài) SQL?
A3(╬?益?): MyBatis 提供了動(dòng)態(tài) SQL 的功能,可以在映射器中使用 <if>、&lヽ(′▽?zhuān)?ノt;choose>??;、??<when>、<otherwi??se> 等元素來(lái)根據條件構建 SQL 語(yǔ)句。
Q4: MyBatis 如何處理事務(wù)?
A4: MyBatis 本身不直接管理事務(wù),而是依賴(lài)于數據庫連接池或 JTA 來(lái)實(shí)現事務(wù)管理,在 MyB??atis 中,可以通過(guò)配置事務(wù)管理器來(lái)控制事務(wù)的提交和回??滾。