溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis整體架構及運行流程是什么

發布時間:2021-12-21 13:38:22 來源:億速云 閱讀:213 作者:iii 欄目:編程語言

本篇內容介紹了“Mybatis整體架構及運行流程是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Mybatis是什么

Mybatis是一個持久層框架,用于數據的持久化。主要表現為將SQL與POJO進行一個映射,將SQL從代碼中解耦?;靖拍钊鐖D:

Mybatis整體架構及運行流程是什么

使用時,以User為例,UserMapper定義了findById接口,該接口返回一個User對象,接口的實現為一個xml配置文件。該xml文件中定義對應接口中的實現所需要的SQL。從而達到將SQL與代碼解耦的目標。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.mybatis.UserMapper">  
    <select id="findById" parameterType="int" resultType="User">  
        select user_id id,user_name userName,user_age age from t_user where user_id=#{id}  
    </select>  
</mapper>
    MyBatis 是Apache的一個Java開源項目,是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。Mybatis可以將Sql語句配置在XML文件中,避免將Sql語句硬編碼在Java類中。

特點

1.Mybatis通過參數映射方式,可以將參數靈活的配置在SQL語句中的配置文件中,避免在Java類中配置參數(JDBC)

2.Mybatis通過輸出映射機制,將結果集的檢索自動映射成相應的Java對象,避免對結果集手工檢索(JDBC)

3.Mybatis可以通過Xml配置文件對數據庫連接進行管理

核心類介紹

1.SqlSessionaFactoryBuilder :該類主要用于創建 SqlSessionFactory, 這個類可以被實例化、使用和丟棄,一旦創建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 實例的最佳作用域是方法作用域(也就是局部方法變量)。

2.SqlSessionFactory :該類的作用了創建 SqlSession, 從名字上我們也能看出, 該類使用了工廠模式, 每次應用程序訪問數據庫, 我們就要通過 SqlSessionFactory 創建 SqlSession, 所以 SqlSessionFactory 和整個 Mybatis 的生命周期是相同的. 這也告訴我們不能創建多個同一個數據的 SqlSessionFactory, 如果創建多個, 會消耗盡數據庫的連接資源, 導致服務器夯機. 應當使用單例模式. 避免過多的連接被消耗, 也方便管理。

3.SqlSession :SqlSession 相當于一個會話, 每次訪問數據庫都需要這樣一個會話, 大家可能會想起了 JDBC 中的 Connection, 很類似, 但還是有區別的, 何況現在幾乎所有的連接都是使用的連接池技術, 用完后直接歸還而不會像 Session 一樣銷毀. 注意: 他是一個線程不安全的對象, 在設計多線程的時候我們需要特別的當心, 操作數據庫需要注意其隔離級別, 數據庫鎖等高級特性, 此外, 每次創建的 SqlSession 都必須及時關閉它, 它長期存在就會使數據庫連接池的活動資源減少, 對系統性能的影響很大, 我們一般在 finally 塊中將其關閉. 還有, SqlSession 存活于一個應用的請求和操作, 可以執行多條 Sql, 保證事務的一致性。SqlSession在執行過程中,有包含了幾大對象:

     3.1.Executor :執行器,由它調度 StatementHandler、ParameterHandler、ResultSetHandler 等來執行對應的 SQL。其中 StatementHandler 是最重要的。
     3.2.StatementHandler :作用是使用數據庫的 Statement(PreparedStatement)執行操作,它是四大對象的核心,起到承上啟下的作用,許多重要的插件都是通過攔截它來實現的。
     3.3.ParamentHandler :用來處理 SQL 參數的。
     3.4.ResultSetHandler :進行數據集的封裝返回處理的。

4.Mapper :映射器是一些由你創建的、綁定你映射的語句的接口。映射器接口的實例是從 SqlSession 中獲得的, 他的作用是發送 SQL, 然后返回我們需要的結果. 或者執行 SQL 從而更改數據庫的數據, 因此它應該在 SqlSession 的事務方法之內, 在 Spring 管理的 Bean 中, Mapper 是單例的。

功能架構:我們把Mybatis的功能架構分為三層

(1)API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。

(2)數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。

(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。

Mybatis整體架構及運行流程是什么

框架結構:

(1)加載配置:配置來源于兩個地方,一處是配置文件,一處是Java代碼的注解,將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。

(2)SQL解析:當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數據類型),Mybatis會根據SQL的ID找到對應的MappedStatement,然后根據傳入參數對象對MappedStatement進行解析,解析后可以得到最終要執行的SQL語句和參數。

(3)SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。

(4)結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,并將最終結果返回。

Mybatis整體架構及運行流程是什么

執行流程:

1.獲取SqlsessionFactory:根據配置文件(全局、sql映射)初始化configuration對象,

2.獲取sqlSession:創建一個DefaultSqlSession對象,包含Configuration及Executor(根據全局配置文件中defaultExecutorType創建對應的Executor)

3.獲取接口代理對象MapperProxy:DefaultSqlSession.getMapper拿到Mapper接口對應的MapperProxy

4.執行增刪改查

 1、調用DefaultSqlSession增刪改查
 2、創建StatementHandler (同時創建ParameterHandler,ResultSetHandler)
 3、調用StatementHandler預編譯參數以及設置參數值,使用ParameterHandler給sql設置參數
 4、調用StatementHandler增刪改查
 5、ResultSetHandler封裝結果

Mybatis整體架構及運行流程是什么

與Hibernate的異同

Mybatis開始逐漸流行起來,必然有其原因,簡單了解了一下它與同為持久層框架的Hibernate的異同。

  • 映射模式
    從上面的簡單概念可以知道Mybatis實際上著力點在POJO與SQL的映射。而Hibernate則主要是POJO與數據庫表的對象關系映射。前者掌控力度更細,代碼量會相對多一點,后者靈活性則差一點,更為自動化一些,與PHP里的Eloquent屬于同類型。

  • 性能
    Mybatis基于原生JDBC,相比于對JDBC進行二次封裝的Hibernate性能會更好一點。

  • 開發與維護
    Hibernate配置好實體類后,使用起來是比較簡潔,舒服的,但是前期學習曲線比較陡,后期調優比較麻煩。Mybatis對SQL掌控的顆粒更細一點,相比較而言看上去簡陋些。由于直接映射SQL,遷移性是個問題。mybatis新手上路

MyBatis簡介

Mybatis是Apache的一個Java開源項目,是一個支持動態Sql語句的持久層框架。Mybatis可以將Sql語句配置在XML文件中,避免將Sql語句硬編碼在Java類中。與JDBC相比:

  1. Mybatis通過參數映射方式,可以將參數靈活的配置在SQL語句中的配置文件中,避免在Java類中配置參數(JDBC)

  2. Mybatis通過輸出映射機制,將結果集的檢索自動映射成相應的Java對象,避免對結果集手工檢索(JDBC)

  3. Mybatis可以通過Xml配置文件對數據庫連接進行管理。

MyBatis整體架構及運行流程

Mybatis整體構造由 數據源配置文件、Sql映射文件、會話工廠、會話、執行器和底層封裝對象組成。

1.數據源配置文件

通過配置的方式將數據庫的配置信息從應用程序中獨立出來,由獨立的模塊管理和配置。Mybatis的數據源配置文件包含數據庫驅動、數據庫連接地址、用戶名密碼、事務管理等,還可以配置連接池的連接數、空閑時間等。

一個SqlMapConfig.xml基本的配置信息如下:


2.Sql映射文件

Mybatis中所有數據庫的操作都會基于該映射文件和配置的sql語句,在這個配置文件中可以配置任何類型的sql語句??蚣軙鶕渲梦募械膮蹬渲?,完成對sql語句以及輸入輸出參數的映射配置。

Mapper.xml配置文件大致如下:


3.會話工廠與會話

Mybatis中會話工廠SqlSessionFactory類可以通過加載資源文件,讀取數據源配置SqlMapConfig.xml信息,從而產生一種可以與數據庫交互的會話實例SqlSession,會話實例SqlSession根據Mapper.xml文件中配置的sql,對數據庫進行操作。

4.運行流程

會話工廠SqlSessionFactory通過加載資源文件獲取SqlMapConfig.xml配置文件信息,然后生成可以與數據庫交互的會話實例SqlSession。

會話實例可以根據Mapper配置文件中的Sql配置去執行相應的增刪改查操作。

在SqlSession會話實例內部,通過執行器Executor對數據庫進行操作,Executor依靠封裝對象Mappered Statement,它分裝了從mapper.xml文件中讀取的信息(sql語句,參數,結果集類型)。

Mybatis通過執行器與Mappered Statement的結合實現與數據庫的交互。

執行流程圖:

Mybatis整體架構及運行流程是什么

測試工程搭建

  1. 新建maven工程

Mybatis整體架構及運行流程是什么

2. 添加依賴pom.xml

4.0.0com.slmybatis-demo0.0.1-SNAPSHOT4.123.4.15.1.321.2.17junitjunit${junit.version}org.mybatismybatis${mybatis.version}mysqlmysql-connector-java${mysql.version}log4jlog4j${log4j.version}

3.編寫數據源配置文件SqlMapConfig.xml

<!—申明mapper文件 --&gt

4.編寫SQL映射配置文件productMapper.xml

Mybatis整體架構及運行流程是什么


5.編寫測試代碼TestClient.java

//使用productMapper.xml配置文件
public class TestClient { //定義會話SqlSession
    SqlSession session =null;
    @Before public void init() throws IOException { //定義mabatis全局配置文件
        String resource = "SqlMapConfig.xml"; //加載mybatis全局配置文件 //InputStream inputStream = TestClient.class.getClassLoader().getResourceAsStream(resource);
 InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(inputStream); //根據sqlSessionFactory產生會話sqlsession
        session = factory.openSession();    
    } //查詢所有user表所有數據
 @Test public void testSelectAllUser() {
        String statement = "com.sl.mapper.ProductMapper.selectAllProduct";
        ListlistProduct =session.selectList(statement); for(Product product:listProduct)
        {
            System.out.println(product);
        } //關閉會話
 session.close();    
    }
}public class Product { private int Id; private String Name; private String Description; private BigDecimal UnitPrice; private String ImageUrl; private Boolean IsNew; public int getId() { return Id;
    } public void setId(int id) { this.Id = id;
    } public String getName() { return Name;
    } public void setName(String name) { this.Name = name;
    } public String getDescription() { return Description;
    } public void setDescription(String description) { this.Description = description;
    } public BigDecimal getUnitPrice() { return UnitPrice;
    } public void setUnitPrice(BigDecimal unitprice) { this.UnitPrice = unitprice;
    } public String getImageUrl() { return Name;
    } public void setImageUrl(String imageurl) { this.ImageUrl = imageurl;
    } public boolean getIsNew() { return IsNew;
    } public void setIsNew(boolean isnew) { this.IsNew = isnew;
    }
    @Override public String toString() { return "Product [id=" + Id + ", Name=" + Name + ", Description=" + Description + ", UnitPrice=" + UnitPrice + ", ImageUrl=" + ImageUrl + ", IsNew=" + IsNew+ "]";
    }
}6.運行測試用例

“Mybatis整體架構及運行流程是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女