ORMMySQL
概念:
ORM:對象關(guān)系映射 ,?全拼?Object-Relation Mapping ,是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配現(xiàn)象的技術(shù)。主要實現(xiàn)模型對象到關(guān)系型數(shù)據(jù)庫數(shù)據(jù)的映射.比如:把數(shù)據(jù)庫表中每條記錄映射為一個模型對象
?
使用原因:
若不使用ORM框架實現(xiàn)一個應(yīng)用程序時,我們可能會寫特別多數(shù)據(jù)訪問層的代碼,從數(shù)據(jù)庫保存、刪除、讀取對象信息,而這些代碼都是重復(fù)的。而使用ORM則會大大減少重復(fù)性代碼。對象關(guān)系映射主要實現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射。
?
ORM的核心原則:?
· 簡單:以最基本的形式建模數(shù)據(jù)。比如將MySQL的一張表映射為一個python類,表中的字段就是此類的屬性.
· 傳達性:將數(shù)據(jù)庫結(jié)構(gòu)轉(zhuǎn)化成能夠被任何人理解的語言文檔化。比如MySQL的一張表就被ORM轉(zhuǎn)化為了一個python程序員熟悉的python類
· 精確性:ORM將所有的mysql數(shù)據(jù)表都統(tǒng)一映射成了標準的python類,保持在代碼層面上的準確統(tǒng)一。
· 易用:ORM將所有的對于持久化對象的CRUD操作全部都封裝成了方法,通過這種封裝避免了不規(guī)范、冗余、風格不一的SQL語句,方便編碼風格的統(tǒng)一和后期維護。?
?
ORM?作用 :
1. 將定義數(shù)據(jù)庫 `模型類 ` --->? 數(shù)據(jù)庫表
2. 將定義數(shù)據(jù)庫模型類中的 `屬性`? --->? 數(shù)據(jù)庫表字段
3. 將模型對象的操作(add,delete,commit)? --->? 對應(yīng)sql語句,并將執(zhí)行結(jié)果提交到數(shù)據(jù)庫
?
優(yōu)點 :
0.只需要面向?qū)ο缶幊? 不需要面向數(shù)據(jù)庫編寫代碼.
1.實現(xiàn)了數(shù)據(jù)模型與數(shù)據(jù)庫的解耦, 屏蔽了不同數(shù)據(jù)庫操作上的差異.
2.使得遷移數(shù)據(jù)庫變得十分方便,可移植性高,如果項目需要更改數(shù)據(jù)庫時,直接修改配置即可,無需考慮另一種數(shù)據(jù)庫的語法差異.
3.省時高效率開發(fā),降低開發(fā)成本?,不再需要寫復(fù)雜冗長的SQL語句,僅僅關(guān)心具體的業(yè)務(wù)邏輯實現(xiàn)即可.
缺點 :
0.相比較于直接使用SQL語句操作數(shù)據(jù)庫,有性能損失.
1.根據(jù)對象的操作轉(zhuǎn)換成SQL語句,根據(jù)查詢的結(jié)果轉(zhuǎn)化成對象, 在映射過程中有性能損失.
2.持久化層缺乏彈性。一旦出現(xiàn)業(yè)務(wù)需求的變更,就必須修改持久化層的接口?
3.持久化層同時與域模型與關(guān)系數(shù)據(jù)庫模型綁定,不管域模型還是關(guān)系數(shù)據(jù)庫模型發(fā)生變化,毒藥修改持久化曾的相關(guān)程序代碼,增加了軟件的維護難度。?
4.ORM的缺點是會犧牲程序的執(zhí)行效率和會固定思維模式。?
5.在對對象做持久化時,ORM一般會持久化所有的屬性,但有時這是不被期望的
6.在處理多表聯(lián)查、where條件復(fù)雜之類的查詢時,ORM的語法會變得復(fù)雜
CURD :
數(shù)據(jù)庫基本操作中的Create(創(chuàng)建)、ReadRetrieve(讀取)、Update(更新)、Delete(刪除)。
?
SQL結(jié)構(gòu)化查詢語言 :
DQL:?數(shù)據(jù)查詢語句/數(shù)據(jù)的查詢(select)
DML:?數(shù)據(jù)操作語句/數(shù)據(jù)的增刪改(insert delete updata)
DDL:?數(shù)據(jù)定義語句/庫和表的操作(create drop)
DCL:?數(shù)據(jù)控制語?, 進?授權(quán)與權(quán)限回收,(grant、 revoke)
TPL: 事務(wù)處理語言,對事務(wù)進行處理,包括begin transaction、 commit、 rollback
DCL: 數(shù)據(jù)控制語言,進行授權(quán)與權(quán)限回收,如grant、 revoke
?
MySQL數(shù)據(jù)完整性包括 :
實體完整性,保證某一條記錄的唯一性,主要有 主鍵約束[primary key]&唯一鍵約束,一張表僅能有一個null[unique key]
域完整性,保證某一字段的類型或約束,主要有?非空[not null]&默認值[default xxx]
參照完整性,限制表之間的規(guī)則,即外鍵,主要有?外鍵約束[foreign key]
用戶定義完整性,用戶對某一字段的進一步控制范圍,限定約束
?
事務(wù)的特性(ACID) :
原子性A,事務(wù)中的全部操作在數(shù)據(jù)庫中是不可分割的,要么全部執(zhí)行,要么均不執(zhí)行
一致性C,幾個并行執(zhí)行的事務(wù),其執(zhí)行結(jié)果必須與按某一順序串行執(zhí)行的結(jié)果相一致
隔離性I,事務(wù)的執(zhí)行不受其他事務(wù)的干擾,事務(wù)的執(zhí)行的中間結(jié)果必須對其他事務(wù)透明
持久性D,對于任意已提交的事務(wù),系統(tǒng)必須保證該事務(wù)對數(shù)據(jù)庫的該表永不丟失,即使數(shù)據(jù)庫出現(xiàn)故障
?
數(shù)據(jù)庫分類 :
關(guān)系型數(shù)據(jù)庫:?Oracle , MySQL , SQLite,基于關(guān)系模型的數(shù)據(jù)庫,是一個 二維表模型和表之間關(guān)系 的集合,適合于關(guān)系特別復(fù)雜的數(shù)據(jù)查詢場景.
非關(guān)系型數(shù)據(jù)庫(nosql):?mongDB , Redis,不基于關(guān)系模型,不是二維表模型,強調(diào)以?key - value?格式存儲數(shù)據(jù),比關(guān)系型數(shù)據(jù)庫更加靈活和可擴展,基本不支持事務(wù).
?
MySQL & Redis :
?
轉(zhuǎn)載于:https://www.cnblogs.com/hsmwlyl/p/10576148.html
總結(jié)
- 上一篇: PMP项目管理13个计划
- 下一篇: t470换屏线_硬件笔记之Thinkpa