mybatis關於ORM的使用以及設計(一)[ORM的初始化]
- ORM
WIKI中的解釋。畫重點
Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to construct their own ORM tools.
ORM:對象關系映射
作用:在不同的系統之間做數據轉換。
手段:通過面向對象的語言
實際舉例:數據庫是一套系統,應用是一套系統。兩者之間數據的轉換使用面向對象的語言。
再舉個例子:數據庫裏面保存 行記錄: id 1,蘋果,紅色 用圖形語言(圖形應該也是一種語言,不用嘴說,但每個人都能懂)表現為??.而用面向對象的語言來表達則是Apple{ red }
- MYBATIS是否是一個合格的ORM框架?
用上面的定義來驗證MYBATIS。
①在我們實際使用MYBATIS的過程中,涉及不同系統之間的數據轉換。 數據庫-應用程序
②使用面向對象的語言Java將數據庫的數據轉換為內存中的對象。同時也能夠將對象轉變為內存中的數據。
通過以上兩點得出結論。Mybatis是一款滿足ORM的工具。
- MYBATIS是如何做對象轉換數據庫數據的?
- 我們如何設計?
- MYBATIS是如何實現ORM
從對象->數據->對象?
- MYBATIS是如何將數據轉換為對象的?
- 讀取SQL信息
- 讀取查詢參數對象->SQL的信息
- 讀取查詢結果
說明:
SqlSessionFactoryBuilder:構建SqlSessionFactory
XMLConfigBuilder 讀取mybatis-config.xml
XMLMapperBuilder 讀取mybatis-config.xml中的<mappers>
XMLStatementBuilder 讀取具體Mapper中的select、insert、update、delete
MappedStatementBuilder 生成具體的Statement
以上幾個關鍵類,完成了ORM框架的初始化
問題:
1、創建時,創建對象數量?
SqlSessionFactoryBuilder(1)--XMLConfigBuilder(1)
XMLConfigBuilder(1)--XMLMapperBuilder(N) 根據<mapper節點中的xml文件個數創建
XMLMapperBuilder(1)--XMLStatementBuilder(N) 每一個select|insert|update|delete 會創建一個
XMLStatementBuilder(1)--MappedStatementBuilder(N) 每一個select|insert|update|delete 會創建一個
2、XMLMapperBuilder、XMLStatementBuilder、MappedStatement.Builder這三個對象創建的比較多,何時回收?
查看代碼:
MappedStatement.Builder 引用mappedStatement
而mappedStatement被config引用.所以不會銷毀
public static class Builder { private MappedStatement mappedStatement = new MappedStatement();
XMLStatementBuilder
引用著builderAssistant, 應該會被銷毀?
/** * @author Clinton Begin */ public class XMLStatementBuilder extends BaseBuilder { private final MapperBuilderAssistant builderAssistant; private final XNode context; private final String requiredDatabaseId;
XMLMapperBuilder 應該會被銷毀
public class XMLMapperBuilder extends BaseBuilder { private final XPathParser parser; private final MapperBuilderAssistant builderAssistant; private final Map<String, XNode> sqlFragments; private final String resource;
本地測試將jvm參數調整為 -xms 50m -xmx100M 查看堆對象。以上三個對象已經被回收
將內存設置大-xmx 256m -xmx 1024m 後,內存足夠,沒有被回收
下一節 分析 如何將對象轉換為可執行的SQL
mybatis關於ORM的使用以及設計(一)[ORM的初始化]