了解orm,先了解以下概念:
什麼是「持久化」
持久(persistence),即把資料(如記憶體中的物件)儲存到可永久儲存的儲存裝置中(如磁碟)。持久化的主要應用是將記憶體中的資料儲存在關係型的資料庫中,當然也可以儲存在磁碟檔案中、xml資料檔案中等等。什麼是 「持久層」
持久層(persistence layer),即專注於實現資料持久化應用領域的某個特定系統的乙個邏輯層面,將資料使用者和資料實體相關聯。什麼是orm
為什麼要做持久化和orm設計(重要)
在目前的企業應用系統設計中,mvc,即 model(模型)- view(檢視)- control(控制)為主要的系統架構模式。mvc 中的 model 包含了複雜的業務邏輯和資料邏輯,以及資料訪問機制(如 jdbc的連線、sql生成和statement建立、還有resultset結果集的讀取等)等。將這些複雜的業務邏輯和資料邏輯分離,以將系統的緊耦 合關係轉化為松耦合關係(即解耦合),是降低系統耦合度迫切要做的,也是持久化要做的工作。mvc 模式實現了架構上將表現層(即view)和資料處理層(即model)分離的解耦合,而持久化的設計則實現了資料處理層內部的業務邏輯和資料邏輯分離的解耦合。 而 orm 作為持久化設計中的最重要也最複雜的技術,也是目前業界熱點技術。
簡單來說,按通常的系統設計,使用 jdbc 運算元據庫,業務處理邏輯和資料訪問邏輯是混雜在一起的。
一般基本都是如下幾個步驟:
1、建立資料庫連線,獲得 connection 物件。
2、根據使用者的輸入組裝查詢 sql 語句。
3、根據 sql 語句建立 statement 物件 或者 preparedstatement 物件。
4、用 connection 物件執行 sql語句,獲得結果集 resultset 物件。
5、然後一條一條讀取結果集 resultset 物件中的資料。
6、根據讀取到的資料,按特定的業務邏輯進行計算。
7、根據計算得到的結果再組裝更新 sql 語句。
8、再使用 connection 物件執行更新 sql 語句,以更新資料庫中的資料。
7、最後依次關閉各個 statement 物件和 connection 物件。
由上可看出**邏輯非常複雜,這還不包括某條語句執行失敗的處理邏輯。其中的業務處理邏輯和資料訪問邏輯完全混雜在一塊。而乙個完整的系統要包含成 千上萬個這樣重複的而又混雜的處理過程,假如要對其中某些業務邏輯或者一些相關聯的業務流程做修改,要改動的**量將不可想象。另一方面,假如要換資料庫 產品或者執行環境也可能是個不可能完成的任務。而使用者的執行環境和要求卻千差萬別,我們不可能為每乙個使用者每一種執行環境設計一套一樣的系統。
所 以就要將一樣的處理**即業務邏輯和可能不一樣的處理即資料訪問邏輯分離開來,另一方面,關係型資料庫中的資料基本都是以一行行的資料進行訪問的,而程式 執行卻是乙個個物件進行處理,而目前大部分資料庫驅動技術(如ado.net、jdbc、odbc等等)均是以行集的結果集一條條進行處理的。所以為解決 這一困難,就出現 orm 這乙個物件和資料之間對映技術。
舉例來說,比如要完成乙個購物打折**的程式,用 orm 思想將如下實現(引自《深入淺出hibernate》):
業務邏輯如下:
public double calcamount(string customerid, double amount)
這 樣**就非常清晰了,而且與資料訪問邏輯完全分離。設計業務邏輯**的時候完全不需要考慮資料庫jdbc的那些千篇一律的操作,而將它交給 customermanager 和 promotionmanager 兩個類去完成。這就是乙個簡單的 orm 設計,實際的 orm 實現框架比這個要複雜的多。
Hibernate 中的 ORM 對映 原理
只要我們在配置屬性時去想,是將 什麼 字段 配置成 什麼 型別的 屬性 就能游刃有餘了 在類的設計中,我們可以將 表的 普通字段 設計為 類的 普通屬性 使用基本資料型別 就可以存放這些欄位的值了。但是,對於 關係字段 我們用什麼來存放它呢?先來看關係字段 代表了什麼 比如,person 與 idc...
Django 中ORM 的使用
1 手動新建乙個資料庫 2 告訴django連線哪個資料庫 settings.py裡配置資料庫連線資訊 資料庫相關的配置項 databases 3 告訴django用pymsql 模組代替預設的mysqldb 去連線mysql 在和settings.py 同目錄下的 init py檔案中做配置 im...
什麼是ORM為什麼要使用ORM
簡單來說,按通常的系統設計,使用 jdbc 運算元據庫,業務處理邏輯和資料訪問邏輯是混雜在一起的。一般基本都是如下幾個步驟 1 建立資料庫連線,獲得 connection 物件。2 根據使用者的輸入組裝查詢 sql 語句。3 根據 sql 語句建立 statement 物件 或者 prepareds...