【问题标题】:Any good ORM tools for Android development? [closed]有什么好的安卓开发ORM工具吗? [关闭]
【发布时间】:2010-09-27 03:47:32
【问题描述】:

在 Android ('gPhone') 上工作的任何人都知道或知道我可以找到一个好的 ORM 工具的地方吗?代码是用 Java 编写的,数据库是 SQLite。我想找到的是一个给定对象定义的工具,可以自动生成表和 CRUD 函数(那会很棒),或者,除此之外,一个可以接受表定义、对象定义的工具,并自动生成 CRUD 功能。问题是所有这些都必须发生在 Android 框架内,该框架对数据库访问的工作方式有自己的约定。

【问题讨论】:

  • 我认为现在没有可用的。
  • 它是 2014 年。我想我会提到 Sprinkles (github.com/emilsjolander/sprinkles),因为没有人提到它。在 github、meaven Central、内容观察者上获得 500 颗星,值得一试
  • 现在是 2015 年。Software Tree 最近发布了JDXA,这是一个简单但功能强大且灵活的 Android ORM。支持继承、一对一、一对多、多对一和多对多关系。 JDXA 的 POJO(普通旧 Java 对象)友好的非侵入式编程模型不需要您以任何方式更改您的 Java 类: - 无需从任何基类子类化您的域类 - 无需使用注释使源代码混乱 -无需 DAO 类 - 无需生成源代码
  • 看看这个不错的tutorial on JDXA ORM
  • 如果您更喜欢纯自然的 Android 代码而没有额外的库依赖项,请查看SQLite peer class code generator example。它基于注解并支持组合主键、组合唯一约束和索引。

标签: java android sqlite orm crud


【解决方案1】:

我想我会在这里添加我的 0.02 美元关于我的ORMLite package

它是 Hibernate 的轻量级替代品,并使用原生 Android 操作系统数据库调用来支持 Android 上的 SQLite。它还支持在其他架构上使用 JDBC 的许多其他数据库类型。对于 ORMLite 问题,我们有一个 Android mailing list

【讨论】:

  • ORMLite 是否具有对 (one|many)-to-(many|one) 关系的内置支持?我找不到太多这方面的信息......如果没有,有这方面的计划吗?
  • 取决于您所说的“支持”。有一些关于如何使用“外部对象”的示例代码,它们是您如何进行一对多的,还有一些关于如何使用连接表来完成多对多的示例 (ormlite.com/docs/examples)。向用户列表发布更多问题 (groups.google.com/group/ormlite-user)。
  • 是的,它肯定比 ActiveAndroid 大。当然还有更多的功能。也是免费软件,而不是 AA 的许可证。但如果大小是目标,ORMLite 不适合你。
  • @Gray Ironic 因为它应该是“精简版”:P
  • 确实是@SalmanPK。虽然有不同程度的lite。 :-)
【解决方案2】:

这个问题不会过时,但建议的框架可以。因此,这里首先列出我认为在此类框架中比较重要的内容:

  • 是否有 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,它运行起来非常快速流畅!
【解决方案3】:

如果性能和代码大小很重要,请查看greenDAO。我是它的作者,我创建另一个 ORM 的动机是避免在热点中反射。事实证明,greenDAO 可以比 ORMLite 快 4 倍。详情请查看feature page

【讨论】:

  • 看起来不错,但必须生成 Dao's 对我来说是一个障碍:(
  • 是的,生成代码对开发人员来说是一个额外的步骤,但它可以为您节省大量应用程序的性能。引导和解析数据库结果都明显更快。其他工具依赖于反射,这在 Android 中非常缓慢。
  • 我在我的项目中使用了greenDao,我对此非常满意。
  • @greenrobot 你有一些使用你的库的“大应用程序”的展示吗?
  • @StErMi 路径正在使用 greenDAO。他们的安装量 > 1 M。见github.com/greenrobot/greenDAO/issues/20#issuecomment-13278922
【解决方案4】:

我不知道您所要求的任何东西,但是如果您的架构要求灵活,您可能会发现 SQLite 的替代方案很有用。 db4o 可能值得一试:

【讨论】:

  • 我在 DB40 上取得了不错的成绩...虽然想签出 Active Android...
  • activeandroid.com 看起来很酷,我期待着试一试
【解决方案5】:

ActiveAndroid ($20) 看起来可能正是您所需要的。

【讨论】:

  • 我知道您在这里并没有尝试任何狡猾的东西,但是当您在 SO 上提到您自己的产品之一时,您能否在帖子中披露您的隶属关系?我知道你的名字在链接页面的页脚,但我们正试图打击astroturfing(这不是),所以我们要求每个人都遵循相同的披露准则。谢谢。
  • 请注意,ActiveAndroid 不是免费的。
  • ActiveAndroid 现在是免费和开源的 - pardom.github.com/ActiveAndroid
【解决方案6】:

我喜欢 ActiveAndroid。它似乎是专门为Android编写的。这对我来说是一个加分项。

我有一些 Ruby on Rails 经验,如果您喜欢 Rails 的 ActiveRecord 方式,您可以很快开始使用这个库。

https://www.activeandroid.com/

【讨论】:

  • 不错的框架,但它与 org.codehous.jackson 库冲突,所以如果你在项目中使用它,你将无法使用 ActveAndroid
  • 怎么冲突?您是否将其报告为 tracker.activeandroid.com 中的错误?
  • 也许看看androrm.the-pixelpla.net 它具有大部分功能,我会说更多。另外:它是免费和开源的。
【解决方案7】:

https://github.com/ahmetalpbalkan/orman

Orman 框架可能会对您有所帮助。它是专门为此设计的,非常小巧实用。

【讨论】:

    【解决方案8】:

    我也在寻找 Android 上的 ORM。我测试了ActiveAndroidNeoDatisdb4o,我认为我会使用最后两个中的一个。

    NeoDatis 和 db4o 非常相似,所以我想要一些建议来选择最好的。有人在他的项目中使用其中一个吗?我将使用它作为免费和付费的应用程序,但似乎两者对 Android 没有任何许可限制。

    有一个基准here 似乎说NeoDatis 比db4o 快,但我不知道我们是否可以以此为依据。

    【讨论】:

    • Db40 和 NeoDatis 是对象数据库,只是它们的大小完全无法在 Android 上使用
    • @DroidIn.net 你能提供一个链接来支持你的评论吗?
    【解决方案9】:

    还有一个新人:android-active-record。 它是一个非常轻量级且易于使用的基于 SQLite 的 Android 持久性框架 http://code.google.com/p/android-active-record/

    【讨论】:

    • 看起来它仍处于早期开发阶段,但值得关注!
    • 试过了——这是一个不错的开始,但需要做很多工作才能为黄金时段做好准备
    【解决方案10】:

    来自 Aptana 的ActiveRecordJS 是一个应该在 gPhone 上运行的 Javascript ORM。它旨在与 Jaxer 和 Gears 一起使用。当您使用 Jaxer 适配器时,您可以连接到 SQLLite。

    更新:我想我没有说清楚,但 ActiveRecordJS 是一个运行客户端的 ORM,这可能对您在 gPhone 上是一个优势。

    【讨论】:

    • 在 Java 代码中?还是在 JavaScript 代码中?
    • 我很确定您所说的是纯粹用于基于浏览器 (Web) 的应用程序的 Javascript 解决方案。我看不出它与 Android 原生应用开发有何关系。
    【解决方案11】:

    http://hadi.sourceforge.net

    这个工具非常简单易用。

    【讨论】:

      【解决方案12】:

      我已经为 Android 开发了自己的 JPA ORM 实现。它还没有完全完成功能,但是您可以使用@Entity、@Id、@Column 注释对类进行注释,并且您可以获得可以从 SQLite 数据库存储和检索的 JPA 实体。在我将它发布给公众之前,它需要更多的功能和清理,但如果有足够的兴趣,它可能会加速我的工作。

      【讨论】:

      • 听起来很有趣,你是不是已经……看看/试试?干杯,马丁
      • 一年多过去了,这方面进展如何? Android 上的 JPA + Annotations 听起来很棒!
      【解决方案13】:

      尽管这是一篇旧文章,但该主题仍然具有相关性。因此,我想分享一篇有趣的文章和解决问题中提到的大多数问题的好方法:

      http://blog.codecentric.de/en/2011/04/android-persistence-accelerated-small-inhouse-orm/

      希望任何人都觉得这和我一样有用!

      【讨论】:

        【解决方案14】:

        我自己的 DroidParts /http://droidparts.org/ 刚刚达到 v0.5。这是一个 DI/ORM 库等等。
        文档不多,但包含一个示例应用程序。

        【讨论】:

        • 添加适当的文档可能是个好主意。
        【解决方案15】:

        对 db4o (v. 8) 有负面体验:索引无法正常工作(异常等)。因此,当对象结构中有对象时,我没有设法避免在外部表中创建重复项。更详细的解释在我的question。希望有一天会更好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-12
          • 2010-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          相关资源
          最近更新 更多