1. 程式人生 > >mybatis關於ORM的使用以及設計(一)[ORM的初始化]

mybatis關於ORM的使用以及設計(一)[ORM的初始化]

pan () -m .com som 轉換 text fin thp

  • 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是如何做對象轉換數據庫數據的?
  1. 我們如何設計?

       技術分享圖片

  1. MYBATIS是如何實現ORM

   從對象->數據->對象?

  • MYBATIS是如何將數據轉換為對象的?
  1. 讀取SQL信息
  2. 讀取查詢參數對象->SQL的信息
  3. 讀取查詢結果

技術分享圖片

    說明:

    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的初始化]