orm
ORM(Object Relational Mapping)框架采用元數(shù)據(jù)來描述對象一關系映射細節(jié)系吩,元數(shù)據(jù)一般采用XML格式,并且存放在專門的對象一映射文件中妒蔚。
只要提供了持久化類與表的映射關系穿挨,ORM框架在運行時就能參照映射文件的信息,把對象持久化到數(shù)據(jù)庫中肴盏。當前ORM框架主要有五種:Hibernate(Nhibernate)科盛,iBATIS,mybatis菜皂,EclipseLink贞绵,JFinal。
ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),在我們想到描述的時候自然就想到了xml和特性(Attribute).目前的ORM框架中,Hibernate就是典型的使用xml文件作為描述實體對象的映射框架,而大名鼎鼎的Linq則是使用特性(Attribute)來描述的幌墓。
什么是ORM
即Object-Relationl Mapping但壮,它的作用是在關系型數(shù)據(jù)庫和對象之間作一個映射冀泻,這樣,我們在具體的操作數(shù)據(jù)庫的時候蜡饵,就不需要再去和復雜的SQL語句打交道弹渔,只要像平時操作對象一樣操作它就可以了 。
為什么要做持久化和ORM設計(重要)
在目前的企業(yè)應用系統(tǒng)設計中溯祸,MVC肢专,即 Model(模型)- View(視圖)- Control(控制)為主要的系統(tǒng)架構模式。MVC 中的 Model 包含了復雜的業(yè)務邏輯和數(shù)據(jù)邏輯焦辅,以及數(shù)據(jù)存取機制(如 JDBC的連接博杖、SQL生成和Statement創(chuàng)建、還有ResultSet結果集的讀取等)等筷登。將這些復雜的業(yè)務邏輯和數(shù)據(jù)邏輯分離剃根,以將系統(tǒng)的緊耦 合關系轉化為松耦合關系(即解耦合),是降低系統(tǒng)耦合度迫切要做的前方,也是持久化要做的工作狈醉。MVC 模式實現(xiàn)了架構上將表現(xiàn)層(即View)和數(shù)據(jù)處理層(即Model)分離的解耦合,而持久化的設計則實現(xiàn)了數(shù)據(jù)處理層內(nèi)部的業(yè)務邏輯和數(shù)據(jù)邏輯分離的解耦合惠险。 而 ORM 作為持久化設計中的最重要也最復雜的技術苗傅,也是目前業(yè)界熱點技術。
簡單來說班巩,按通常的系統(tǒng)設計渣慕,使用 JDBC 操作數(shù)據(jù)庫,業(yè)務處理邏輯和數(shù)據(jù)存取邏輯是混雜在一起的抱慌。
一般基本都是如下幾個步驟:
1逊桦、建立數(shù)據(jù)庫連接,獲得 Connection 對象遥缕。
2卫袒、根據(jù)用戶的輸入組裝查詢 SQL 語句宵呛。
3单匣、根據(jù) SQL 語句建立 Statement 對象 或者 PreparedStatement 對象。
4宝穗、用 Connection 對象執(zhí)行 SQL語句户秤,獲得結果集 ResultSet 對象。
5逮矛、然后一條一條讀取結果集 ResultSet 對象中的數(shù)據(jù)鸡号。
6、根據(jù)讀取到的數(shù)據(jù)须鼎,按特定的業(yè)務邏輯進行計算鲸伴。
7府蔗、根據(jù)計算得到的結果再組裝更新 SQL 語句。
8汞窗、再使用 Connection 對象執(zhí)行更新 SQL 語句姓赤,以更新數(shù)據(jù)庫中的數(shù)據(jù)。
7仲吏、最后依次關閉各個 Statement 對象和 Connection 對象不铆。
舉例來說,比如要完成一個購物打折促銷的程序裹唆,用 ORM 思想將如下實現(xiàn),業(yè)務邏輯如下:
public Double calcAmount(String customerid, double amount)
{
// 根據(jù)客戶ID獲得客戶記錄
Customer customer = CustomerManager.getCustomer(custmerid);
// 根據(jù)客戶等級獲得打折規(guī)則
Promotion promotion = PromotionManager.getPromotion(customer.getLevel());
// 累積客戶總消費額誓斥,并保存累計結果
customer.setSumAmount(customer.getSumAmount().add(amount);
CustomerManager.save(customer);
// 返回打折后的金額
return amount.multiply(protomtion.getRatio());
}