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. Bzoj3122:多项式BSGS

    根据鸽笼原理,在p次后一定循环,一眼BSGS.发现他给的函数是个一次函数,一次函数有什么性质呢?f(f(x))还是一次函数,这样就能做了.首先我们暴力预处理出f(f(f(x)))......sqrt( ...

  2. 8.4 正睿暑期集训营 Day1

    目录 2018.8.4 正睿暑期集训营 Day1 A 数对子 B 逆序对 C 盖房子 考试代码 A B C 2018.8.4 正睿暑期集训营 Day1 时间:4.5h(实际) 期望得分:30+50+3 ...

  3. BZOJ2468 : [中山市选2010]三核苷酸

    令d[i]为第i个样本数据,cnt为样本个数,经过化简可得 \[ans=\frac{\sum(d[i]^2)}{cnt}-(\frac{\sum d[i]}{cnt})^2\] 枚举每一种可能的三核苷 ...

  4. Gym 100646 Problem E: Su-Su-Sudoku 水题

    Problem E: Su-Su-Sudoku/center> 题目连接: http://codeforces.com/gym/100646/attachments Description By ...

  5. 【原】Redis windows下的环境搭建

    下载地址:https://github.com/dmajkic/redis/downloads 下载下来的包里有两个,一个是32位的,一个是64位的.根据自己的实情情况选择,我的是64bit,把这个文 ...

  6. spring boot 集成 druid

    写在前面 因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能是数据库连接的问题, ...

  7. Wingdings 2 符号编码对照表

     http://blog.csdn.net/linux7985/article/details/5030754 符号  编码 HTML 代码  符号  编码 HTML 代码 ! ! " &q ...

  8. vbs学习笔记2——创建桌面快捷方式

    脚本 Set WshShell = WScript.CreateObject("WScript.Shell") strDesktop = WshShell.SpecialFolde ...

  9. WebConfig 加密解密的原理是什么?

    WebConfig 加密解密的原理是什么? 使用命令 加密数据连接串 加密:aspnet_regiis -pef connectionStrings d:/...(webconfig所在路径,不能含中 ...

  10. 《Go语言实战》摘录:6.4 并发 - 锁住共享资源

    6.4 锁住共享资源