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());
}
}
結果: