ORM數據庫框架 SQLite 經常使用數據庫框架比較 MD

Markdown版本筆記 個人GitHub首頁 個人博客 個人微信 個人郵箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

ORM數據庫框架 SQLite 經常使用數據庫框架比較java


目錄

簡介

Demoreact

這些ORM框架的實現方式主要有如下幾種:android

  • 註解。分爲運行時註解(Retention爲RUNTIME),編譯時註解(另外兩種Retention),運行時註解其實也是利用了反射的原理,非運行時註解通常都是用於(編譯時)生成代碼的
  • 反射。除非運行前已經自動生成了代碼,不然能夠確定就是經過反射方式實現的。
  • 直接生成代碼。通常是經過程序根據註解自動生成須要的代碼。

經過運行時註解或反射去創建數據表和實體的關係會致使性能比較低。從性能角度出發,應該選擇使用編譯時註解或代碼生成的框架。固然,成熟程度,文檔資料等也是考量點。git

關係型數據庫

greenDAO 智能代碼生成 10K+ 首選

GitHub
greenDAO與其餘常見的ORM框架不一樣,其原理不是根據反射進行數據庫的各項操做,而是一開始就人工生成業務須要的Model和DAO文件,業務中能夠直接調用相應的DAO文件進行數據庫操做,從而避免了因反射帶來的性能損耗和效率低下。github

以查詢爲例,其首先是建立數據庫,而後在SQLiteOpenHelper.onCreate方法中根據已生成的model建立全部的表,而db.query其實就是Android原生的查詢操做,只不過參數是通過DAO文件處理過的,無需手動匹配。sql

因爲須要人工生成model和DAO文件,因此greenDAO的配置就略顯複雜。數據庫

優勢:效率高,速度快,文件較小,佔用更少的內存,操做實體靈活
缺點:學習成本較高。小程序

ORMLite 註解+反射 1.5K 通用

GitHub
基於註解和反射的的方式,致使ormlite性能有着必定的損失(運行時註解其實也是利用了反射的原理)api

OrmLite 不是 Android 平臺專用的ORM框架,它是Java ORM。支持JDBC鏈接,Spring以及Android平臺。語法中普遍使用了運行時註解。安全

優勢:文檔較全面,社區活躍,有好的維護,使用簡單,易上手。
缺點:基於反射,效率較低(GreenDAO比OrmLite要快幾乎4.5倍)

LitePal 註解+反射 5K 最簡單

GitHub
An Android library that makes developers use SQLite database extremely easy.

  • LitePal經過LitePal.xml文件獲取數據庫的名稱、版本號以及表,而後自動建立數據庫和表,以及表數據類型和非空約束等。
  • 要執行增刪改查操做的數據model都會繼承DataSupport,最後將查詢獲得的數據轉換成List並返回。
  • LitePal不論是建立數據庫、表仍是執行增刪改查,都是根據Model的類名和屬性名,每次都須要進行反射拼裝,而後調用Android原生的數據庫操做,或者直接執行sql語句,實現相應的功能。

特色

  • 根據反射進行數據庫的各項操做(速度比GreenDAO要慢不少不少)
  • 採用對象關係映射(ORM)的模式
  • 很「輕」,jar包只有100k不到
  • 使用起來比較簡單
  • 支持直接用sql原始語句實現查詢的api方法

DBFlow 5K

GitHub
A blazing fast, powerful, and very simple ORM android database library that writes database code for you.

特色

  • 相關代碼經過編譯時註解生成,不會致使性能瓶頸。
  • 功能特性比較豐富,文檔較完善。
  • 數據庫版本升級和數據遷移有較簡便的解決方案,支持集成SQLCipher加密,支持Content Provider Generation。

ActiveAndroid 4.5K

GitHub
官網
Active record[活動目錄] style SQLite persistence[持久化] for Android
Active Record是Yii、Rails等框架中對ORM實現的典型命名方式。Active Android 幫助你以面向對象的方式來操做SQLite。

sugar 2.5K

GitHub
官網
Insanely easy way to work with Android Database.

SugarORM 是 Android 平臺專用ORM。提供簡單易學的APIs,能夠很容易的處理1對1和1對多的關係型數據,並經過3個函數save(), delete() 和 find() (或者 findById()) 來簡化CRUD基本操做。

NoSQL 對象型數據庫

NoSQL是趨勢。其實對關係型數據庫引入ORM,就是實現了對象型數據庫要作的事情。

Realm 10K-

GitHub
官網

Realm is a mobile database: a replacement for SQLite & ORMs

基於C++編寫,直接運行在你的設備硬件上(不須要被解釋),所以運行很快。
Realm是一個直接在手機,平板電腦或可穿戴設備中運行的移動數據庫。 此存儲庫包含Realm的Java版本的源代碼,該版本目前僅在Android上運行。

特徵:

  • 移動優先:Realm是第一個直接在手機、平板電腦和可穿戴設備內部運行的數據庫。
  • 簡單:數據直接做爲對象公開,而且能夠經過代碼查詢,從而消除了對ORM性能和維護問題的需求。 此外,咱們努力將咱們的API保持在極少數類上:咱們的大多數用戶直觀地選擇它[pick it up intuitively],在幾分鐘內啓動並運行簡單的應用程序。
  • 現代[Modern]:Realm支持簡單的線程安全,關係和加密[relationships & encryption]。
  • 快速:Realm在常見操做上比原始SQLite更快,同時保持極其豐富的功能集。

ObjectBox 2.5K

GitHub
官網

ObjectBox是一個超快的面向對象數據庫,具備強大的關係支持[strong relation support]。 ObjectBox是嵌入到您的Android,Linux,macOS或Windows應用程序中。

特性:

  • 超快:咱們構建ObjectBox的動機是提供最佳性能。到目前爲止,ObjectBox優於咱們測試過的全部嵌入式數據庫。
  • 對象API:再也不有行、列和SQL - ObjectBox是一個從出生開始就是爲對象構建的移動數據庫(沒有ORM,沒有SQLite)。API簡潔、易於學習,只須要使用SQLite所需的一小部分代碼。
  • QueryBuilder:經過使用ObjectBox,會在編譯時檢查,所以,您沒有更多的因拼寫錯誤而致使的運行時崩潰。
  • 對象關係:對象引用/關係[Object references / relationships]是內置類型,它們是原生的引用[native references]。
  • 反應[Reactive]:對數據變化作出的反應簡單而有力。使用ObjectBox中的反應數據觀察器[reactive data observers]或與RxJava集成。
  • 多平臺:ObjectBox已經支持Android和普通Java(Linux和Windows)。 MacOS和iOS是路線圖中的下一個平臺。
  • 即時單元測試:使用咱們的多平臺方法[multiplatform approach],您能夠在幾秒鐘內使用真實數據庫在桌面上運行普通單元測試(無需Robolectric,無需 instrumentation tests)。
  • 強大的技術[Robust technology]:ACID屬性和多版本併發控制(Multiversion Concurrency Control, MVCC)爲您提供安全的事務和並行性[safe transactions and parallelism]。 ACID表明:原子[Atomic],Consitent,隔離[Isolated],耐用[Durable]。
  • 簡單線程:ObjectBox返回的對象在沒有附加字符串的全部線程中工做。
  • 無手動模式遷移[No manual schema migrations]:ObjectBox負責處理具備添加,刪除和重命名屬性的對象新版本[new object versions]。
  • DaoCompat庫:已經使用了greenDAO?這個小程序庫爲您提供了 familiar greenDAO APIs for ObjectBox.
  • 歷經測試:自從ObjectBox處於測試階段以來,咱們已經在擁有超過150,000個月活躍用戶和數千個設備的應用程序中運行它。固然,咱們內部進行了大量的單元測試(> 1000次單獨測試)。

2018-8-17

附件列表

相關文章
相關標籤/搜索