關係型資料庫與物件導向的衝突

來源:互聯網
上載者:User

物件導向是從軟體工程基本原則(如耦合、彙總和封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別,而Java是完全物件導向的語言,這個衝突就表現的越發明顯。

對目前的J2EE資訊化系統而言,通常採用物件導向分析和物件導向設計的過程。系統從需求設計到系統設計都是按物件導向方式進行。但到了詳細設計階段,由於資料持久化需要儲存到關聯式資料庫,不得不自底向上修改設計方案,又回到了按照過程進行編程的老路上來,這是非常令人沮喪的。

如代碼9.2展示的是由資料庫中查詢資料,按條讀取結果集中每一個欄位,然後裝配成對象,而代碼9.3展示的是相反的情況,把一個對象儲存到資料庫中。需要把對象的每一個屬性拆出來,拼湊成SQL字串,再提交資料庫。這個來迴轉換的過程煩瑣而且極容易錯,對於一個物件導向的程式如噩夢一般。

代碼9.2  查詢資料庫組裝對象

List persons = new Arraylist();
ResultSet rs = stmt.executeQuery("SELECT * FROM person");
// 對結果集進行處理
while (rs.next()) {
Person person  = new Person
int id = rs.getInt("id");
String name = rs.getString("name");
Integer age = rs.getObject("age") == null
null : rs.getInt("age");
person.setId(id);
person.setName(name);
persion.setAget(age);
Persons.add(person);
}
代碼9.3   儲存對象到資料
 String sql = "insert into t_person (id, name, age) values
("+person.getId+", "+person.getName()+", "+person.getAge()+")";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql)
con.commit()
優秀的物件導向開發人員厭倦了這種重複性的勞動,開始採用通常的“積極”偷懶做法,即建立工具,使整個過程自動化,協助開發人員只關心對象而不必考慮資料庫的結構。對於關聯式資料庫來說,這種努力的最大成果就是下一節要介紹的對象/關係映射(ORM)工具。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.