1

我们公司目前正在实施一些供员工使用的工具,因为我是公司内唯一的程序员,因此我负责开发这些工具。

但是我对 web 服务或 java 几乎没有经验,所以我对这里的一些逻辑有点难过。并希望有人能给我一些指导

我们在英国托管了一个 mysql 数据库,这将为我们的其他办事处在英国境内和英国境外使用的工具提供数据。我希望通过 Web 服务提供对数据库的访问。

然而,经过调查,我觉得我错过了一些关键的东西。现在我正在为每个数据库表创建方法,所以每个表都需要一个选择、更新和删除方法,因为有 20 个奇数表,这意味着 Web 服务将暴露 60 个方法!,这正常吗?

在我看来,会有一种更简单的方法来做到这一点,但是我对 java 的经验很少,我很茫然,到目前为止,我的 google fu 让我失望了。

谁能给我一些关于这样做的“通常”方式的指示?如果有一些我只是忽略了的方法。

4

4 回答 4

2

应该为每个实体而不是为每个表编写 Web 服务。一个实体应该是一个逻辑实体,而不是简单的非常抽象的东西。数据库中可以有多个表来存储一个实体的数据。例如:您有一个名为“Person”的实体,但假设此人的详细信息存储在多个表中,例如“PersonDetail”、“PersonContactDetails”、“PersonDependentDetails”等。您可以使用为“创建的 Web 服务”操作这些表数据人'。

Web 服务操作可以映射到数据库 CRUD(CREATE,READ,UPDATE,DELETE) 操作。如果您正在编写 RESTful Web 服务,CRUD 操作可以映射到 HTTP 方法,即 POST、GET、PUT、DELETE。

于 2013-06-24T16:29:31.253 回答
2

这是一种典型的方法,尽管它是一个相当大的学习曲线:

  1. 创建数据访问对象 (DAO) 以查询数据库并将关系数据模型转换为 java 对象模型。如果不考虑极端性能(大多数应用程序不考虑),请考虑 ORM 映射框架,如HibernateJPA。您可能不需要每个表使用一种方法。很多时候,多个表组成一个域对象。例如,在银行应用程序中,您可能有一个名为 customer 的表和一个名为 customer_balance 的相关表。如果您只想向客户提供余额,您可以拥有一个名为“Customer”的域对象,其中包含一个名为“balance”的字段。您的 Customer DAO 将加入 customer 和 customer_balance 以创建单个 Customer 对象。

  2. 创建服务以包装 DAO 并将您的业务规则应用于它们。尽可能在服务中保留商业规则,因为它提高了可测试性。一个简单的银行服务方法的例子是“withdrawMoney(amount)”。该服务将通过 DAO 从数据库中提取客户,然后首先检查自定义当前余额中是否至少有“金额”,然后从当前余额中减去“金额”并通过 DAO 将其保存在数据库中。

  3. 您的 Web 层将调用服务层并将数据呈现给用户并允许他们对其进行操作。在某些时候,您可能希望您的 Web 层通过 Web 服务 API 与服务层进行通信,尽管这对于早期实现来说可能是多余的。

正如其他人所引用的,Java Petstore 应用程序是这种方法的一个很好的例子。Oracle 不再维护 Petstore 应用程序,但志愿者已将其复制到 GitHub 并使其与最新的 J2ee 版本保持同步。这是 GitHub 站点的链接: https ://github.com/agoncal/agoncal-application-petstore-ee6

于 2013-06-24T16:43:49.883 回答
0

是的,如果您的 20 个表中的每一个都需要选择 (HTTP GET)、更新 (HTTP PUT) 和删除 (HTTP DELETE),那么您可能需要 20*3=60 个方法。

于 2013-06-24T16:25:56.967 回答
0

您可能希望从阅读 Java EE 7 教程的这一部分开始,它将为您提供 Web 服务开发的概述。您的建议虽然看起来很奇怪,但也许并不是您真正想要的。如果您想将每个表公开给更新/删除/等,那么您最好只打开数据库服务器的端口,但这通常被认为是一个坏主意。

我认为您可能希望在更高级别工作并传递对象而不是数据库更新,例如Person,您的应用程序中有一个对象。您可以将它传入和传出您的 Web 应用程序和客户端应用程序,并让 Web 应用程序担心将其放入数据库、删除它等。尽管按照您建议的方式执行更新在技术上没有任何问题,但我没有见过它做了很多年。

于 2013-06-24T16:27:47.013 回答