當前位置:成語大全網 - 成語大全 - spring Java中MyBatis的工作流程是怎樣的?

spring Java中MyBatis的工作流程是怎樣的?

壹. Mybatis簡介

MyBatis是壹個壹流的持久性框架,支持定制SQL、存儲過程和高級映射。MyBatis幾乎消除了所有的JDBC碼,基本不需要手動設置參數,獲取檢索結果。MyBatis可以配置簡單的XML格式或註釋,可以將基本數據元素、映射接口和POJOs(公共java對象)映射到數據庫中的記錄。

二、MyBatis工作流程

(1)加載配置並初始化。

觸發條件:加載配置文件

配置來自兩個地方,壹個是配置文件,壹個是Java代碼的註釋。SQL的配置信息被加載到MappedStatement對象中(包括傳入的參數映射配置、執行的SQL語句和結果映射配置)並存儲在內存中。

(2)接收呼叫請求

觸發條件:調用Mybatis提供的API。

傳入參數:SQL的ID和傳入的參數對象。

處理:將請求傳遞給較低的請求處理層進行處理。

(3)處理操作請求的觸發條件:API接口層發送請求。

傳入參數:SQL的ID和傳入的參數對象。

處理過程:

(a)根據SQL的ID查找對應的MappedStatement對象。

(b)根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。

(c)獲取數據庫連接,根據獲取的最終SQL語句和輸入參數執行數據庫,並獲取執行結果。

(d)根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換,得到最終的處理結果。

(e)釋放連接資源。

(4)返回處理結果,返回最終處理結果。

orm工具的基本思想

不管是用hibernate,mybatis,妳都能發現它們有壹個共同點:

從配置文件(通常是XML配置文件)獲取sessionfactory。

按會話工廠生成會話

在會話中完成數據的增加、刪除、修改、查詢和事務提交。

使用後關閉會話。

有壹個配置文件用於java對象和數據庫之間的映射,它通常是壹個xml文件。

功能建築

spring Java-我的Batis簡介

Mybatis的功能架構分為三層:

API接口層:提供給外部使用的接口API,開發者可以通過這些本地API操縱數據庫。接口層收到調用請求後,會調用數據處理層完成具體的數據處理。

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

基本支持層:負責最基本的功能支持,包括連接管理、事務管理、配置加載和緩存處理。這些都是常見的東西,提取出來作為最基本的成分。為上層數據處理層提供最基本的支持。

要添加的更多驅動程序包:

spring Java-我的Batis簡介

這裏有壹個快速的開始:

該目錄如下:

spring Java-我的Batis簡介

實體類用戶

包com . oumyye . model;

公共類用戶{

私有字符串id;

私有字符串名稱;

私人?int age

公共字符串getId() {

返回id;

}

公共void setId(字符串id) {

this.id = id

}

公共字符串getName() {

返回名稱;

}

public void setName(字符串名){

this.name = name

}

public int getAge() {

回歸年齡;

}

公共無效存儲(整數){

this.age =年齡;

}

@覆蓋

公共字符串toString() {

返回“用戶[id=" + id +",姓名=" +姓名+",年齡=" +年齡+"]”;

}

}

映射文件UserMapping.xml

& lt?xml版本="1.0 "編碼="UTF-8 "?& gt

& lt!DOCTYPE Mapper PUBLIC "-//mybatis . org//DTD Mapper 3.0//EN " " oumyye . mapping . user mapping " & gt;

& lt!-在select標記中編寫查詢的SQL語句,並將select標記的id屬性設置為getUser。id屬性值必須是唯壹的,並且不能重復。

使用parameterType屬性指示查詢中使用的參數類型,而resultType屬性指示查詢返回的結果集類型。

結果type = "com。oumyye.model.User”是指將查詢結果封裝成User類的對象返回。

用戶類是對應於用戶表的實體類。

-& gt;

& lt!- ?

根據id查詢獲取壹個用戶對象。

?-& gt;

& ltselect id = " getUser " parameter type = " String "?

result type = " com . oumyye . model . user " & gt;

select * from用戶,其中id=#{id}

& lt/select & gt;

& lt/mapper & gt;

資源文件mybatis.xml

& lt?xml版本="1.0 "編碼="UTF-8 "?& gt

& lt!DOCTYPE配置PUBLIC "-//mybatis . org//DTD Config 3.0//EN " " MySQL . JDBC . driver "/& gt;

& ltproperty name = " URL " value = " JDBC:MySQL://localhost:3306/mybatis "/& gt;

& lt屬性name = " username " value = " root "/& gt;

& ltproperty name = " password " value = " root "/& gt;

& lt/data source & gt;

& lt/環境& gt

& lt/environments & gt;

& ltmappers & gt

& ltmapper resource = " com/oumyye/mapping/user mapping . XML "/& gt;

?& lt/mappers & gt;

& lt/configuration & gt;

測試類別:

包裝測試;

導入Java . io . inputstream;

導入org . Apache . ibatis . session . SQL session;

導入org . Apache . ibatis . session . SQL session factory;

導入org . Apache . ibatis . session . sqlsessionfactorybuilder;

導入org . JUnit . test;

導入com . oumyye . model . user;

公共類測試{

@測試

公共無效測試(){

String resource = " mybatis.xml

//使用類加載器加載mybatis的配置文件(也加載關聯的映射文件)。

InputStream is = tests . class . getclass loader()。getResourceAsStream(資源);

//為sqlSession構建壹個工廠。

SqlSessionFactory session factory = new SqlSessionFactoryBuilder()。構建(is);

SQL session session = session factory . open session();

/**

?*映射sql的標識字符串,

?* com . oumyye . mapping . user mapping是userMapper.xml文件中mapper標記的namespace屬性的值。

?* getUser是select標簽的id屬性值,通過select標簽的id屬性值可以找到要執行的SQL。

?*/

string statement = " com . oumyye . mapping . user mapping . getuser ";//映射sql的標識字符串。

//執行查詢並返回唯壹用戶對象的sql。

User user = session.selectOne(語句,“1123”);

system . out . println(user . tostring());

}

}

結果: