当前位置: 首页 > 知识库问答 >
问题:

从“原生”Crud/Hibernate迁移到SpringRest API

赵景曜
2023-03-14

TLDR:目前通过数据库直接CRUD回购“保存”等方式管理数据(见下面的示例)。许多人说应该使用REST,但使用CRUD直接方法建立了超过3个数据库的45个表。是否值得花时间移植到REST方法??注意:该应用程序在公司内部使用,但有许多用户,仅供参考,如果安全是你的建议中的一个因素。

我不是术语学方面的佼佼者,因此在高级课程中,我将提供我目前使用的术语的示例。

我的工作是让承包商在3-4年前创建一个应用程序,使用Springboot和Hibernate/Crud Repos。当时我是个大三学生,跟踪他们。然后他们离开了,我负责申请。我从他们身上学到了很多,但有些事情似乎不是最好的做法。我最近参加了一个关于春假的课程,可以看到它的优点。他们创建的应用程序我已经扩展了大约10倍,但一直按照我所学的方式进行数据库连接,见下文。。。

实体/模型(简化示例):

@Entity
public class ConfirmedOrders implements Serializable{


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ORDER_ID")
private Integer orderID;

@Column(name = "ORDER_STATUS")
private String orderStatus;

public ConfirmedOrders(Integer orderID, String orderStatus){
    this.orderID = orderID;
    this.orderStatus = orderStatus;

    public Integer getOrderID() {
    return orderID;
}

public void setOrderID(Integer orderID) {
    this.orderID = orderID;
}

public String getOrderStatus() {
    return orderStatus;
}

public void setOrderStatus(String orderStatus) {
    this.orderStatus = orderStatus;
}

CRUD仓库:

public interface ConfirmedOrdersRepository extends JpaRepository<ConfirmedOrders, Integer> {

    ConfirmedOrders findByOrderID(Integer id);

}

控制器类(示例Snippit):

orderID = 12;

ConfirmedOrders cO  = confirmedOrdersRepo.findByOrderID(orderID);
cO.setOrderStatus("CANCEL");
parent.confirmedOrdersRepo.save(cO);

现在我知道这个方法没有什么“错误”,但我最近和很多人交谈过,他们说最好通过REST来实现。在3个数据库中有超过45个表,所有数据的更改和传输都是如上所述或在需要时使用本机查询完成的。

问题:

是否值得花时间安全/防未来将上述内容转移到其他处理方式??

感谢高级,我希望我使用了正确的术语,这从来都不是我的强项。

共有1个答案

堵景天
2023-03-14

创建一个允许您执行保存/获取/删除/更新操作的REST客户端应该相对容易,有趣的部分是将其他服务或应用程序转换为使用您的RESTendpoint。

如果您有时间这么做,那么重构代码以调用restendpoint并调用存储库“服务”来实际处理存储库功能和数据验证是没有坏处的。

您甚至可以创建rest功能,同时保留原始应用程序,直到所有内容都经过测试和迁移。一旦你这么做了,你就可以对你的endpoint进行版本化,而不是直接修改你的控制器来改变那些可能会破坏的特性和功能。

虽然我不完全理解您的问题,或者您当前的控制器实际使用的是什么,但请让您的REST控制器实现最基本的功能(例如GET/POST/PUT/DELETE),然后在您的服务类中调用适当的方法

您的服务类应该执行所需的所有数据处理 /validation,然后您的存储库只执行CRUD操作。

 类似资料:
  • 我正在从3迁移到Hibernate 5.0.3.final。在3.x中,我使用joda-time在oracle DB中持久化LocalDateTime。现在我看到Hibernate5不支持Joda-Time。请告诉我最好的选择是什么? 下面是代码示例。

  • 我正在使用Maven和JPA编写一个项目(不是web应用程序!)。 我编写了带注释的实体类和CRUD服务类。但是现在,我需要使用而不是来执行这些CRUD操作。 我使用Hibernate作为JPA提供程序,并且在resources文件夹下的上配置了所有内容,目前运行正常。 我知道为了创建像 , 那么我必须在META-INF下使用,但我没有这个XML。 这是我的hibernate.cfg.xml

  • 已有项目 期望接入 Mpx,可根据项目或人力情况选择如何迁移,Mpx 不要求用户一次性用上框架的所有东西。 项目初始期:可以考虑一次性转为 Mpx,此时迁移成本比较低 项目成熟期:若人力有限,可选择逐步将原生小程序转为Mpx,而且 不需要对原有代码做全局重写。可参考此demo:Mpx渐进接入demo。 可以保持原有代码不变,新的组件、页面期望使用 Mpx 某些特性时才引入 Mpx。(推荐新模块引

  • 当前很多企业正在采用云原生应用程序架构,这可以帮助其IT转型,成为市场竞争中真正敏捷的力量。 O'Reilly 的报告中定义了云原生应用程序架构的特性,如微服务和十二因素应用程序。 本书中作者Matt Stine还探究了将传统的单体应用和面向服务架构(SOA)应用迁移到云原生架构所需的文化、组织和技术变革。本书中还有一个迁移手册,其中包含将单体应用程序分解为微服务,实施容错模式和执行云原生服务的自

  • 问题内容: 我正在将应用程序从Hibernate 3迁移到Hibernate5。我们使用class来获取。因此,使用对象来获取数据库表列信息,例如列大小,类型..etc。似乎在Hibernate 5 类中已弃用(已删除!)。Hibernate 5中是否有其他上课的选择?否则如何进入Hibernate 5 env? 问题答案: 当我们转向一种新的模式工具方法时,它在5.0中已被删除。Database

  • 问题内容: 我们的Oracle数据库遇到了严重的性能问题,我们想尝试将其迁移到基于MySQL的数据库(直接使用MySQL,或者最好是Infobright)。 问题是,在我们实际上不知道新数据库的所有功能是否符合我们的需求之前,我们需要让旧系统和新系统至少重叠数周(如果不是几个月)。 因此,这是我们的情况: Oracle数据库由多个表组成,每百万行。白天,实际上有成千上万的语句,我们无法停止迁移。