Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

ORM数据库框架 SQLite 常用数据库框架比较


目录

简介

Demo

这些ORM框架的实现方式主要有以下几种:

  • 注解。分为运行时注解(Retention为RUNTIME),编译时注解(另外两种Retention),运行时注解其实也是利用了反射的原理,非运行时注解一般都是用于(编译时)生成代码的
  • 反射。除非运行前已经自动生成了代码,否则可以肯定就是通过反射方式实现的。
  • 直接生成代码。一般是通过程序根据注解自动生成需要的代码。

通过运行时注解或反射去建立数据表和实体的关系会导致性能比较低。从性能角度出发,应该选择使用编译时注解或代码生成的框架。当然,成熟程度,文档资料等也是考量点。

关系型数据库

greenDAO 智能代码生成 10K+ 首选

GitHub

greenDAO与其他常见的ORM框架不同,其原理不是根据反射进行数据库的各项操作,而是一开始就人工生成业务需要的Model和DAO文件,业务中可以直接调用相应的DAO文件进行数据库操作,从而避免了因反射带来的性能损耗和效率低下。

以查询为例,其首先是创建数据库,然后在SQLiteOpenHelper.onCreate方法中根据已生成的model创建所有的表,而db.query其实就是Android原生的查询操作,只不过参数是经过DAO文件处理过的,无需手动匹配。

由于需要人工生成model和DAO文件,所以greenDAO的配置就略显复杂。

优点:效率高,速度快,文件较小,占用更少的内存,操作实体灵活

缺点:学习成本较高。

ORMLite 注解+反射 1.5K 通用

GitHub

基于注解和反射的的方式,导致ormlite性能有着一定的损失(运行时注解其实也是利用了反射的原理)

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

附件列表

ORM数据库框架 SQLite 常用数据库框架比较 MD的更多相关文章

  1. iOS开发数据库篇—SQLite常用的函数

    iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 * ...

  2. ORM数据库框架 SQLite ORMLite MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 手工搭建基于ABP的框架(2) - 访问数据库

    为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7517397.html 本篇我们实现数据库的访问.我们将实现两种数据库访问方法来访 ...

  4. 混合框架中Oracle数据库的还原处理操作

    在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...

  5. 八:SpringBoot-集成JPA持久层框架,简化数据库操作

    SpringBoot-集成JPA持久层框架,简化数据库操作 1.JPA框架简介 1.1 JPA与Hibernate的关系: 2.SpringBoot整合JPA Spring Data JPA概述: S ...

  6. ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理

    ABP框架的数据访问底层是基于EFCore(Entity Framework Core)的,是微软标志性且成熟的ORM,因此它本身是支持多种主流数据库MySQL,SqlServer,Oracle,SQ ...

  7. 十三、EnterpriseFrameWork框架核心类库之数据库操作(多数据库事务处理)

    本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer.Oracle.DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时 ...

  8. idea中创建web项目搭建Hibernate框架连接oracle数据库

    hibernate框架 hibernate是数据化持久工具,也是一个开源代码的ORM解决方案.hibernate内部封装了通过jdbc访问数据库的操作,向商场应用提供面向对象的数据访问api. hib ...

  9. 数据库历险记(三) | 缓存框架的连环炮 数据库历险记(二) | Redis 和 Mecached 到底哪个好? 数据库历险记(一) | MySQL这么好,为什么还有人用Oracle? 面对海量请求,缓存设计还应该考虑哪些问题?

    数据库历险记(三) | 缓存框架的连环炮   文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3n ...

随机推荐

  1. hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)

    题意: 给一个n*m的矩阵作为地图,0为通路,1为阻碍.只能向上下左右四个方向走.每一年会在一个通路上长出一个阻碍,求第几年最上面一行与最下面一行会被隔开. 输入: 首行一个整数t,表示共有t组数据. ...

  2. springmvc学习总结(一) -- 从零搭建,基础入门

    1.新建maven项目 参考mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)第一部分,修改配置 2.修改pom.xml 文件 <proj ...

  3. oracle A用户访问B用户的表aa

    在B中:grant select on aa to A; (还可以配置insert,update,delete权限)

  4. 在触屏设备上面利用html5裁剪图片

    前言 如今触屏设备越来越流行,并且大多数已经支持html5了.针对此.对触屏设备开发图片裁剪功能, 让其能够直接处理图片.减轻服务端压力. 技术点 浏览器必须支持html5,包含fileReader. ...

  5. poj1050最大子矩阵和

    这篇是看了别人的报告写的,就当是屡屡思路好了. 题目大意.给定一个n阶矩阵(方阵),每一个元素中存在一个数字.任务就是求出一个最大的子矩阵使得矩阵元素之间的和是最大的. n=100; 1.矩阵A[m] ...

  6. 使用IProgress实现异步编程的进程通知

    在异步编程中,有时候希望把进度展示出来,借助IProgress<in T>可以实现. IProgress<in T>只提供了一个方法void Report(T value),通 ...

  7. 解决iframe加载的内容有时显示有时不显示

    在ASP.NET MVC项目中遇到了这样的一个问题,假设父页面有一个iframe <iframe id=" width="100%" height="10 ...

  8. function, new function, new Function

    函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系.    使用方法一:  var foo01 = f ...

  9. CPU和线程的关系

    比如,电脑开了两个程序qq和qq音乐,假设这两个程序都只有一个线程.人能够感觉到CPU切换的频率是一秒一次,假设当前cpu计算速度是1秒1次,那么我们就能明显感到卡顿,当聊天,点击发送按钮时候,qq音 ...

  10. PostgreSQL学习手册(目录)

    原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html 事实上之前有很长一段时间都在纠结是否有必要好好学习它 ...