我们公司目前正在实施一些供员工使用的工具,因为我是该公司内唯一一位致力于开发这些工具的程序员。
但是我对webservices或java几乎没有经验,所以我对这里的一些逻辑感到有点困惑。并希望有人能给我一些指导
我们在英国有一个mysql数据库,这将为我们其他办事处在英国和英国以外使用的工具提供数据。我希望通过Web服务提供对数据库的访问。
然而,考虑到这一点,我感觉我错过了一些关键。现在我正在寻找为每个数据库表创建方法,因此每个表都需要一个select,update和delete方法,因为有20个奇数表,这意味着Web服务将暴露60个方法!这是正常的吗?
在我看来,有一种更简单的方法可以做到这一点,但对Java的经验很少我不知所措,到目前为止我的谷歌已经失败了。
有人能给我一些关于这种“通常”做法的指示吗?如果有某种方式我只是忽略了。
答案 0 :(得分:2)
应为每个实体编写Web服务,而不是为每个表编写。一个实体应该是一个逻辑的,而不仅仅是一个非常抽象的东西。数据库中可以有多个表来存储一个实体的数据。例如:您有一个名为'Person'的实体,但假设该人员的详细信息存储在多个表中,例如'PersonDetail','PersonContactDetails','PersonDependentDetails'等。您可以使用为''创建的webservices操作这些表数据人”。
Web服务操作可以映射到数据库CRUD(CREATE,READ,UPDATE,DELETE)操作。如果您正在编写RESTful Web服务,则可以将CRUD操作映射到HTTP方法,即POST,GET,PUT,DELETE。
答案 1 :(得分:2)
这是一种典型的方法,虽然它是一个非常大的学习曲线:
创建数据访问对象(DAO)以查询数据库并从关系数据模型转换为java对象模型。如果不考虑极端性能(这不是大多数应用程序的考虑因素),请考虑Hibernate或JPA等ORM映射框架。您可能不需要每个表一个方法。很多时候,多个表组成一个域对象。例如,在银行应用程序中,您可能有一个名为customer的表,以及一个名为customer_balance的相关表。如果您只想向客户提供余额,您可以拥有一个名为“客户”的域对象,其中包含一个名为“余额”的字段。您的客户DAO将加入customer和customer_balance以创建单个Customer对象。
创建服务以包装DAO并将业务规则应用于它们。尽可能保持服务中的商业规则,因为它提高了可测试性。简单银行服务方法的一个例子是“withdrawMoney(amount)”。该服务将通过DAO从数据库中提取客户,然后首先检查自定义在当前余额中是否至少具有“金额”,然后从当前余额中减去“金额”并通过DAO将其保存在数据库中。 / p>
您的网络层将调用服务层并将数据呈现给用户并允许他们对其进行操作。在某些时候,您可能希望您的Web层通过Web服务API与服务层进行通信,尽管这对于早期实现来说可能是过度的。
正如其他人所引用的那样,Java Petstore应用程序就是这种方法的一个很好的例子。 Oracle不再维护Petstore应用程序,但志愿者已将其复制到GitHub并使其与最新的J2ee版本保持同步。这是GitHub网站的链接:https://github.com/agoncal/agoncal-application-petstore-ee6
答案 2 :(得分:0)
是的,如果您的20个表中的每一个都需要选择(HTTP GET),更新(HTTP PUT)和删除(HTTP DELETE),您可能需要20 * 3 = 60种方法。
答案 3 :(得分:0)
您可能希望首先阅读Java EE 7教程的this部分,该教程将为您提供Web服务开发的概述。你的建议虽然看似奇怪,也许并不是你想要的。如果你想将每个表暴露给更新/删除/等等,那么你可能最好只打开数据库服务器的端口,但这通常被认为是个坏主意。
我认为您可能希望在更高级别工作并传递对象而不是数据库更新,例如,您的应用程序中有一个Person
对象。您可以将其传递到Web应用程序和客户端应用程序,并让Web应用程序担心将其放入数据库,删除它等等。虽然在您建议我没有看到的方式执行更新时出现技术上的错误它已经做了很多年。