Android开发中有哪些好用的ORM工具?

291

有没有在开发 Android(“gPhone”)方面的人,或者知道我可以在哪里找到一个好的 ORM 工具?代码是用 Java 编写的,数据库是 SQLite。我想找到的是一个工具,它可以根据对象定义自动生成表和 CRUD 函数(那将是很棒的),或者至少可以根据表定义、对象定义自动生成 CRUD 功能。问题在于所有这些都必须在 Android 框架内部完成,该框架有其自己的约定,如何访问数据库。


我认为现在没有可用的。 - mparaz
2
这是2014年的内容。我想提一下Sprinkles(https://github.com/emilsjolander/sprinkles),因为没有人提到它。在Github上有500个星,也在Meaven Central上,具有内容观察者,值得一试。 - AndroidGecko
现在是2015年。Software Tree最近发布了JDXA,这是一个简单而强大、灵活的Android ORM。它支持继承、一对一、一对多、多对一和多对多关系。JDXA的POJO(普通Java对象)友好型非侵入式编程模型不需要您以任何方式更改Java类:
  • 无需从任何基类派生您的域类
  • 无需在源代码中添加注释
  • 不需要DAO类
  • 没有源代码生成
- Damodar Periwal
看看这个关于JDXA ORM的不错的教程:https://onelonecoder.wordpress.com/2015/11/02/jdxa-simple-but-powerful-orm-library-for-android/。 - Damodar Periwal
如果你喜欢不依赖额外库的简单自然的 Android 代码,请看一下 SQLite 对等类代码生成器示例。它基于注解,支持联合主键、联合唯一约束和索引。 - RookieGuy
15个回答

112

在这里,我想简单介绍一下我的ORMLite包

它是一个轻量级的Hibernate替代品,利用本地Android操作系统数据库调用来支持Android上的SQLite。此外,它还使用其他架构上的JDBC支持许多其他数据库类型。我们有一个ORMLite Android邮件列表来回答有关ORMLite的问题。


1
ORMLite是否具有内置的一对多或多对一关系支持?我在这方面找不到太多信息...如果没有,是否有计划支持此功能? - ferdystschenko
1
这取决于你所说的“支持”的含义。有一些示例代码可以演示如何使用“外部对象”来实现一对多,还有一些示例可以演示如何使用连接表来实现多对多(http://ormlite.com/docs/examples)。如果您有更多问题,请在用户列表中发布(http://groups.google.com/group/ormlite-user/)。 - Gray
7
是的,它肯定比ActiveAndroid更大。当然,它也有更多的功能。而且与AA的许可证不同,它是免费软件。但如果大小是目标,ORMLite并不适合您。 - Gray
4
有点讽刺,因为它本应该是“Lite”的 :P - salmatron
5
确实,@SalmanPK。尽管有不同程度的轻量级。 :-) - Gray
显示剩余2条评论

67

这个问题本身不会过时,但是推荐的框架可能会。因此,以下首先列出我认为比较重要的用于比较框架的标准:

  • 是否有Maven或Gradle构件?(这是一个很大的加分项,取决于您使用的是Maven还是Gradle)
  • 代码是否可以轻松地访问,并且包括快速查看提交以评估其活动性的方法?(在这方面,在github上托管的代码对我来说是绝对的加分项)
  • 发布管理:是否有版本发布/标签和相应的构件?(有些项目托管在github上,需要git clone获取代码或提供主干tarball以供下载 - 对我来说如果没有发布标签并在README中指明,那就是一个非常大的缺点)
  • 由于大小很重要,我提供了一些简单获取到的提示(我没有下载任何内容,因此对于那些未提供发布构件的项目,没有大小信息)

以下是一些框架的列表,其中包含有关上述标准的注释。我查找了更多框架,如aBatis和Hadi,但只添加了自2011年以来有一定活动的框架。

我没有尝试过这些项目,但也许我可以通过列出目前活跃的项目来节省读者的时间。如果您知道其他满足上述要点并且有一些严肃的开发(在一段时间内)正在进行的项目,请添加评论。
编辑(2013年11月):更新了项目的当前状态列表。其中一些已经在他们的GitHub存储库中添加了发布标签以及Maven / Gradle支持。干得好!
编辑(2015年4月):更新了列表,添加了Sprinkles(由@AndroidGecko评论)和Realm.io。

我强烈推荐使用Realm,它非常快速流畅! - Crono

40
如果性能和代码大小很重要,可以考虑使用greenDAO。我是它的作者,创造另一个ORM的动机是为了避免在热点中使用反射。结果证明,greenDAO可以比ORMLite快4倍。有关详细信息,请查看特性页面

5
看起来还不错,但是需要生成“道”的这个部分让我有些失望 :( - Chris.Jenkins
4
是的,生成代码对开发者来说是一个额外的步骤,但它可以在应用程序中节省大量的性能。引导和解析数据库结果都会显着加快速度。其他工具依赖反射,在安卓上速度极慢。 - Markus Junginger
3
你们有一些“大型应用程序”使用你们的库的展示吗? - StErMi
1
可以使用单个查询以及主对象来急切地解决一对一关系。请查看http://greendao-orm.com/documentation/relations/中的loadDeep/queryDeep。一对多关系可以使用单个查询来解决。 - Markus Junginger
1
@greenDAO 2.0 支持多对多。 - Markus Junginger
显示剩余10条评论

10

我不知道是否有与您所要求的完全相符的东西,但如果您的架构要求具有一定的灵活性,则可以使用SQLite的替代方案。您可能会发现db4o很有用:


我在使用DB40时取得了不错的结果...不过想试试Active Android... - Ben
1
https://www.activeandroid.com/ 看起来很酷,我期待着体验一下。 - slf

9

14
我知道你没有任何不良企图,但当你在Stack Overflow提到自己的产品时,请在帖子中披露你的关联。我知道你的名称出现在链接页面的页脚中,但我们正在打击人工草根运动(这并不是),所以我们要求每个人遵循相同的披露准则。谢谢。 - Bill the Lizard
4
提醒一下,ActiveAndroid并非免费。 - gak
7
ActiveAndroid现在是免费且开源的 - http://pardom.github.com/ActiveAndroid/ - Michael Pardo

7
我喜欢ActiveAndroid。它似乎是专门为Android编写的,这对我来说是一个加分项。如果您喜欢Rails中的ActiveRecord方式,那么您可以很快使用这个库。请查看https://www.activeandroid.com/

不错的框架,但它与org.codehous.jackson库冲突,因此如果您在项目中使用它,将无法使用ActveAndroid。 - endryha
1
它是如何冲突的?你是否在http://tracker.activeandroid.com/报告了它作为一个bug? - Michael Pardo
也许可以看一下 http://androrm.the-pixelpla.net/ 它拥有大部分的功能,甚至更多。此外:它是免费和开源的。 - philgiese

6

6
我也在寻找一个适用于Android的ORM。我测试了ActiveAndroid, NeoDatisdb4o,我认为我会使用后两者中的一个。
NeoDatis和db4o非常相似,所以我想请教一下如何选择最好的一个。有人在他的项目中使用其中之一吗?我将在免费和付费应用程序中使用它,但似乎这两个在Android上没有任何许可限制。
这里有一个基准here,似乎表明NeoDatis比db4o更快,但我不知道是否可以根据此来做出我的判断。

Db40和NeoDatis是对象数据库,但它们的大小完全不适用于Android,因此无法使用。 - Bostone
@DroidIn.net,你能提供一个支持你评论的链接吗? - Sergio

3

看起来它仍处于早期开发阶段,但值得关注! - GWLlosa
尝试过了 - 这是一个不错的开始,但还需要大量的工作才能准备好迎接主流时间。 - Bostone

2

ActiveRecordJS 是 Aptana 推出的一款 JavaScript ORM,适用于 gPhone。它旨在与 Jaxer 和 Gears 配合使用。当您使用 Jaxer 适配器时,可以连接到 SQLLite。

更新:我认为我没有表述清楚,但 ActiveRecordJS 是一个运行在客户端的 ORM,在 gPhone 上可能是一个优势。


在Java代码中?还是在JavaScript代码中? - GWLlosa
我非常确定你所说的是一种旨在纯粹用于基于浏览器(Web)的应用程序的Javascript解决方案。我不明白它如何与Android本地应用程序开发相关。 - Brian Lacy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接