有没有更好的方法来处理 Android 中的 CRUD 操作?
Posted
技术标签:
【中文标题】有没有更好的方法来处理 Android 中的 CRUD 操作?【英文标题】:Is there a better way to handle CRUD operations in Android? 【发布时间】:2016-08-14 19:20:47 【问题描述】:我现在一直被困在这个问题上,因为我的问题经常被忽略并且在线文档不清楚。显然,为了简化 android 中的 CRUD 操作,您可以使用 ORM,但像 ORMlite 这样的东西似乎非常有限(尤其是如果您有具有对象列表的对象),并且对于非常简单的情况似乎效果更好。
我的选择是什么?否则,我必须为每个对象编写至少四个方法来创建、检索、更新和删除,并且该类的大小会迅速膨胀。
那么人们是怎么做的呢?我在这里感到孤独。
【问题讨论】:
“那么人们是怎么做的呢?” -- 有些人使用the dozens of ORM libraries 之一。有些使用替代数据库引擎,如 Realm 或 Couchbase Mobile。有些使用 Web 服务 API 直接写入托管后端。有些人使用 Gson 等库将 JSON 或 XML 写入本地文件。有些人使用ObjectOutputStream
。而且我确信还有其他方法我忘记了。
这些都不能满足我的需要——我要疯了吗?我是否完全误解了 ORM 在这里应该是什么?为什么每个 ORM 似乎只处理表中单行的单个对象?没有级联持久性/删除/等?
“为什么每个 ORM 似乎只处理表中单行的单个对象?” -- 有些肯定会处理关系(例如,greenDAO、DBFlow、RushORM、ActiveAndroid,仅举四例)。
【参考方案1】:
我认为答案取决于您想要做什么,即您是否需要为您域中的所有实体维护 CRUD 操作。
如果你需要,那么你将不得不处理它。如果你必须处理它,那么,根据我的个人经验,你最好使用传统的 ORM 框架而不是 adhoc 框架。就像 JPA(例如 Hibernate)与其他较小的一样。因为随着您的域名的增长,重量级人物将真正帮助您。当你说你正在使用它时,每个人都会嘲笑你,但相信我 - 当你的域增长时,你会感觉到不同。诚然,你可以成为一个非常有原则的程序员并且在不使用它的情况下做得很好,但这并不适用于所有人。
如果您不需要处理所有这些问题,那么您可以专注于那些可以让您快速入门的问题。我个人最喜欢的是MyBatis。 Spring JDBC 也是一个很棒的工具,可以让你快速启动并运行。
【讨论】:
问题是我遇到的每一个 ORM 框架根本没有做我想做的事。例如,如果我有一个包含 Page 对象列表的 Book 对象,这样如果我保留 Book,它也会保留所有页面。就是这样!它看起来很简单,但没有任何东西可以做到。 @ArukaJ 你看过 JPA 中的级联操作吗?它们存储关系而无需您显式存储它们。您只需将页面添加到 book 对象并存储 book,它也会自动存储页面。 我找不到任何明显/清晰的例子; Java 教程非常难以阅读。 @ArukaJ 看看本文中的一对多示例:vladmihalcea.com/2015/03/05/… 以“最常见的父子关联由一对多和多对一关系组成的部分开头的部分,其中级联对一对多方有用只有:“?【参考方案2】:试试sugar,我发现它的使用非常有效。
它总是归结为您想要实现的目标。
-
更多控制/复杂解决方案 = 更多工作
使用基础知识 = 明智的选择
我的建议,只要保持简单,orm 在大多数情况下会节省您的时间和精力。
【讨论】:
以上是关于有没有更好的方法来处理 Android 中的 CRUD 操作?的主要内容,如果未能解决你的问题,请参考以下文章
有没有更好的方法来编写这个处理比较两个不同列中的日期的 Oracle SQL?