通过JavaWebService提供数据库访问

通过JavaWebService提供数据库访问,java,database,web-services,Java,Database,Web Services,我们公司目前正在实施一些供员工使用的工具,因为我是公司内唯一的程序员,开发这些工具的责任落在我身上 然而,我对webservices或java几乎没有经验,所以我在这里对一些逻辑有点困惑。希望有人能给我一些指导 我们在英国拥有一个mysql数据库,该数据库将为我们的其他办事处在英国国内外使用的工具提供数据。我希望通过web服务提供对数据库的访问 然而,经过调查,我觉得我错过了一些关键的东西。现在我正在为每个数据库表创建方法,因此每个表都需要一个select、update和delete方法,因为有

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

然而,我对webservices或java几乎没有经验,所以我在这里对一些逻辑有点困惑。希望有人能给我一些指导

我们在英国拥有一个mysql数据库,该数据库将为我们的其他办事处在英国国内外使用的工具提供数据。我希望通过web服务提供对数据库的访问

然而,经过调查,我觉得我错过了一些关键的东西。现在我正在为每个数据库表创建方法,因此每个表都需要一个select、update和delete方法,因为有20多个表,这意味着web服务将公开60个方法!,这正常吗

在我看来,有一种更简单的方法可以做到这一点,但由于缺乏java方面的经验,我感到不知所措,我的google fu迄今为止让我失望


有谁能给我指点一下“通常”的做法是什么?如果我忽略了某些方法。

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

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

您可能希望从阅读JavaEE7教程的一部分开始,该教程将为您提供web服务开发的概述。你的建议看起来很奇怪,也许不是你真正想要的。如果您想将每个表公开给updates/deletes/etc,那么最好只打开数据库服务器的端口,但这通常被认为是个坏主意


我认为您可能希望在更高的级别上工作并传递对象,而不是数据库更新,例如,您的应用程序中有一个
Person
对象。您可以在web应用程序和客户机应用程序之间传递,让web应用程序担心将其放入数据库,删除它等等。虽然按照您建议的方式执行更新在技术上没有什么问题,但我已经多年没有看到过这样做了。

您可能希望先阅读Java EE 7教程的一部分,该教程将为您提供web服务开发的概述。你的建议看起来很奇怪,也许不是你真正想要的。如果您想将每个表公开给updates/deletes/etc,那么最好只打开数据库服务器的端口,但这通常被认为是个坏主意


我认为您可能希望在更高的级别上工作并传递对象,而不是数据库更新,例如,您的应用程序中有一个
Person
对象。您可以在web应用程序和客户机应用程序之间传递,让web应用程序担心将其放入数据库,删除它等等。虽然按照您建议的方式执行更新在技术上没有什么问题,但我已经多年没有看到过这样做了。

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


Web服务操作可以映射到数据库CRUD(创建、读取、更新、删除)操作。如果您正在编写RESTful Web服务,CRUD操作可以映射到HTTP方法,即POST、GET、PUT、DELETE。

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


Web服务操作可以映射到数据库CRUD(创建、读取、更新、删除)操作。如果您正在编写RESTful Web服务,CRUD操作可以映射到HTTP方法,即POST、GET、PUT、DELETE。

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

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

  • 创建服务来包装DAO,并对其应用您的业务规则。尽可能在服务中保留业务规则,因为它提高了可测试性。简单银行服务方法的一个例子是“取款(金额)”。服务将通过DAO将客户从DB中拉出来,然后首先检查客户