对象关系映射(ORM)介绍理解
問題背景
假設,讓你設計一個框架,把jdbc封裝一下??
JDBC操作步驟:
那么??使用JDBC操作是否方便呢?那么也就需要設計一個框架,來更好地操作數據庫!!!
ORM是什么?為何要有ORM?
我們在使用Django框架開發web應用的過程中,不可避免地會涉及到數據的管理操作(增、刪、改、查),而一旦談到數據的管理操作,就需要用到數據庫管理軟件,例如mysql、oracle、Microsoft SQL Server等。
如果應用程序需要操作數據(比如將用戶注冊信息永久存放起來),那么我們需要在應用程序中編寫原生sql語句,然后使用pymysql模塊遠程操作mysql數據庫。
針對應用程序的數據操作,直接編寫原生sql語句會存在兩方面的問題,嚴重影響開發效率,如下:
- sql語句的執行效率問題:應用開發程序員需要耗費一大部分精力去優化sql語句
- 數據庫遷移問題:針對mysql開發的sql語句無法直接應用到oracle數據庫上,一旦需要遷移數據庫,便需要考慮跨平臺問題
為了解決上述問題,django引入了ORM的概念,ORM全稱Object Relational Mapping,即對象關系映射,是在pymysq之上又進行了一層封裝,對于數據的操作,我們無需再去編寫原生sql,取代代之的是基于面向對象的思想去編寫類、對象、調用相應的方法等,ORM會將其轉換/映射成原生SQL然后交給pymysql執行
基于圖2所示,有了ORM框架,開發人員既不用再去考慮原生SQL的優化問題,也不用考慮數據庫遷移的問題,ORM都幫我們做了優化且支持多種數據庫,這極大地提升了我們的開發效率。
簡單說,ORM 就是通過實例對象的語法,完成關系型數據庫的操作的技術,是"對象-關系映射"(Object/Relational Mapping) 的縮寫。ORM 把數據庫映射成對象。
數據庫的表(table) --> 類(class) 記錄(record,行數據)--> 對象(object) 字段(field)--> 對象的屬性(attribute)數據庫設計表和字段時,也是同時設計java的實體類。
示例理解
這是一行sql語句:
select id, first_name, last_name, phone, birth_date, sex from persons where id = 10;程序直接運行sql,操作數據庫的寫法如下:
res = db.execSql(sql); name = res[0]["first_name"];使用 ORM的寫法:
p = Person.get(10); name = p.first_name;一比較就可以發現,ORM 使用對象,封裝了數據庫操作,因此可以不碰 SQL 語言。開發者只使用面向對象編程,與數據對象直接交互,不用關心底層數據庫。
ORM 優點
- 數據模型都在一個地方定義,更容易更新和維護,也利于重用代碼。
- ORM 有現成的工具,很多功能都可以自動完成,比如數據消毒、預處理、事務等等。
- 它迫使你使用 MVC 架構,ORM 就是天然的 Model,最終使代碼更清晰。
- 基于 ORM 的業務代碼比較簡單,代碼量少,語義性好,容易理解。
- 你不必編寫性能不佳的 SQL。
ORM 缺點
- ORM 庫不是輕量級工具,需要花很多精力學習和設置。
- 對于復雜的查詢,ORM 要么是無法表達,要么是性能不如原生的 SQL。
- ORM 抽象掉了數據庫層,開發者無法了解底層的數據庫操作,也無法定制一些特殊的 SQL。
參考鏈接:
ORM 實例教程
ORM介紹
總結
以上是生活随笔為你收集整理的对象关系映射(ORM)介绍理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sympy简单教程(6)
- 下一篇: Android小项目---BIM体质指数