我要求所有没有使用库的人,但是正在构建自己的对象来管理流入和流出数据库表的数据。我有记录集对象吗?每行数据一个对象?都?都不是?欢迎任何建议或经验。请不要告诉我使用ORM或其他此类工具包。这对我的项目来说太过分了,而且,这不是现在的问题,是吗?
答案 0 :(得分:2)
我强烈建议选择martin fowler的patterns of enterprise application architecture,它描述了一些有助于了解的数据库模式,并让您了解完整的模式演变ORM库。
您可能感兴趣的具体模式:
这些基本模式将让您了解如何构建对象,以及更高级的模式(如活动记录/数据映射器),您将看到这些模式与问题域之间的关系如何超出您目前的需求。
答案 1 :(得分:2)
您的数据模型由域实体主导 - 现实世界的事物。现实世界的东西有时可以映射到数据库中的单个行。一个实体是一个对象是一个关系行 - 大多数。
有时真实世界的实体非常复杂并且跨越多个数据库行。这是“聚合”问题。对象可以是聚合。在不破坏所有常规格式规则的情况下,关系行不容易聚合。
有时,由于类继承,您将难以理解如何将对象映射到数据库行。每层继承层次结构是一行吗?或者是所有图层都平铺到每个子类表中的列?
此外,您需要拥有一些东西(数据库是一系列东西)。
这些“集合”或“记录集”或“管理器”或“数据访问对象”在持久性(SQL?)和域实体之间进行调解。记录集从它可以访问的任何SQL内容构建域对象。同样,记录集将您的域对象展开为SQL内容。
ORM是解决这个问题的一种方法; ORM框架提供了这些类定义。如果ORM“过度杀伤”,请借用设计模式。阅读iBatis API。 [当你在这里时,你可能会发现ORM没有什么太小。]
简而言之,两者:“记录集对象”加上“每行数据一个对象” - 大约。
如果您觉得需要滚动自己的记录集集合,可以尝试使用简单的序列化来保留对象。试图序列化聚合和子类关系的复杂性之外,您将面临复杂性。为什么?对象直接引用彼此。 SQL数据库必须使用主键和外键来模拟它。
答案 2 :(得分:1)
无论您的项目规模如何,我都会说使用ORM :-P
但.....
在没有ORM库的日子里,我们曾经手动从Java记录集对象中提取所有字段并将它们插入到真正的Java类中。
应用于插入和删除的反转(带有标记以指示将要发生的事件)
多行通常被填充到List中。
答案 3 :(得分:1)
这取决于您希望数据库设计如何驱动对象的设计,或者您的域模型是否驱动数据库的设计。
在第一个场景中,您为每个表创建一个类。正如您将很快发现的那样,有时您需要一个连接两个表的对象,因此您必须有一个方案来处理该异常。
在第二个场景中,您需要创建对象的Identity映射,并以某种方式将类的关系映射回表。在这种情况下,将存在您没有对象与表的一对一关系的情况。
我知道您不想要处方工具,但SubSonic是一个非常直接,稳定的工具包,可以帮助您从数据库结构生成代码,非常适合您的方案每桌会有一个班级。您可以在半小时内安装并开始生成代码。值得一看。
答案 4 :(得分:0)
要管理流入和流出数据库的实际数据(没有ORM),您应该查看Jakarta Commons DbUtils。
它提供了非常轻量级的帮助程序来运行查询和更新,例如自动将ResultSet转换为bean等列表。