目前軟件開發行業中,不管是移動端開發仍是後端開發,基本上都會碰到數據庫的開發,這裏就談談筆者對於數據庫的感想數據庫
在移動端亦或是後端開發中,不少時候,咱們會感受到不管是 ORM 仍是其餘方案,都會存在着一些缺點,其實這來源於數據庫自己和開發語言自己的衝突,現代化的語言基本上都是面向對象開發,面向對象是從軟件工程基本原則(如耦合、聚合和封裝)的基礎上發展起來的,而關係數據庫則是從數學理論發展而來的,兩套理論存在顯著的區別。
數據庫最初的時候就是起源於文件,一個程序打開一個文件,而後將一些數據存入文件中,最後關閉文件,從這個需求開發,發展出了數據庫。目前主流關係型數據庫主要有兩種,一種是基於網絡傳輸的數據庫,一種則是嵌入式數據庫,這兩種數據庫區別就在因而否存在完善的權限管理和是否服務端代碼嵌入到了程序中。
不管是哪一種關係型數據庫,開發者都是經過 SQL 語言和其打交道,主流的 ORM 技術實際上只是由數據庫中查詢數據,按條讀取結果集中每個字段,而後裝配成對象,或者須要把對象的每個屬性拆出來,拼湊成SQL字符串,再提交數據庫。後端
廣義上,ORM指的是面向對象的對象模型和關係型數據庫的數據結構之間的相互轉換。 狹義上,ORM能夠被認爲是,基於關係型數據庫的數據存儲,實現一個虛擬的面向對象的數據訪問接口。這裏指的 ORM 是指 Hibernate 這樣的框架,至於 ORM 框架的好處就不說了,ORM 通常狀況下,一個持久化類和一個表對應,類的每一個實例對應表中的一條記錄,類的每一個屬性對應表的每一個字段。 可是,這自己 SQL 語言是存在衝突的,咱們先來拆分一下要求安全
面向對象和上面的行爲其實是格格不入的,好比將表抽象爲一個類,每一個類的實例是一行數據,看起來確實很完美,可是其實存在一個隱藏的缺陷。網絡
目前的主流 ORM 技術有好多種,Hibernate 是一種比較典型的如上面所述的 ORM 技術,Mybatis 則是一種半自動化的 ORM 技術,這裏講一講 Mybatis數據結構
也就是說,ORM 自己,須要作兩件事框架
Mybatis 因爲過於依賴 SQL,所以若是將底層數據庫進行替換,則會致使很大的遷移工做量,Hibernate 就不存在這個問題,可是 Hibernate 確實不夠靈活,剛纔也講到了 SQL 查詢的問題,所以 Hibernate 若是要作到靈活,實在是代價太大了。二者各有優缺點。函數
ORM 主要有兩個意義設計
除了上面這兩種 ORM 之外,還有一種更加輕量級的技術方案,就是提供一整套相似於函數調用方式來寫 SQL 查詢,藉助 IDE 的代碼提示和編譯器語法檢查,來保證安全,這種方案是靈活度最高的。可是更加繁瑣
在針對防注入方面,一般作法是使用綁定參數和預處理語句,避免字符串的拼接,或者採用手段,防止傳入的單引號提早截斷 SQLorm
因爲數據庫查詢存在這麼大的問題,並且須要保證 SQL 安全,筆者有兩條思路對象