java - 如果不使用 ORM,那么以 OOP 方式设计应用程序还有什么意义呢?

标签 java hibernate oop jpa orm

假设应用程序中有特定的类,例如“学生”“位置”“城市”等。

class Student {
String name;
int age;
Location location;
}

class Location {
City city;
String country;
}

class City {
String cityName;
int cityCode;
}

这只是一个显示包含对其他类的引用的类(对象)的示例。

现在如果使用ORM(比如hibernate),这种数据可以直接保存:

save(student);

假设对象“student”已正确定义(就像它包含数据一样)。 现在这既简单又方便。

但是假设我们由于某些原因没有使用 ORM,那么

1.我们从客户端获取数据

2.用用户的数据(或类似的东西)填充对象(所有这些都发生在内存中)

3.现在我们再次分解数据并将其保存到数据库(使用SQL查询) 例如包含诸如

之类的查询
  1. student.location.city.cityName
  2. student.location.city.cityCode 等

现在这不就像只是为了做而做面向对象的事情吗?就像...

1.在内存中创建对象。

2.在保存到数据库之前分解对象。

这件事困扰了我很长时间。非常感谢任何见解或帮助:)

最佳答案

  1. 您的面向对象编程语言使用对象。
  2. 您的数据库使用关系数据。

由于这种不匹配,即使您不选择使用 ORM 工具,您也始终必须将对象映射到关系数据。

您可能对 Active-record pattern 感兴趣。每行都有一个关联的对象引用,但您必须自己解析对象关联(例如多对一、一对多)。

关于java - 如果不使用 ORM,那么以 OOP 方式设计应用程序还有什么意义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28176571/

相关文章:

java - 如果一个类没有状态,所有的方法都应该是静态的吗?

c# - 定义一个接受不同参数的接口(interface)方法

java - 将 authentication-failure-url 定义为 `{currentpage}?login_error=1` ?

java - 没有为 java hibernate 中的实体指定标识符

java jdbc mysql无法使用密码连接

java - 如何使用复合 ID 解决 Session.get() 奇怪的行为?

用于 Java 8 java.time.Instant 的 Hibernate @Temporal

php - 将对象传递给方法,将该对象分配给另一个对象,传入的对象仍然是我传入的同一对象

java - 我可以使用 Swing TextField 在 Java 中进行日期数学运算吗?

java - 如何在同一屏幕上拥有按钮和自定义绘画 View ?安卓