一尘不染

为什么使用JPA而不是直接在Java File上编写SQL查询(即直接写到JDBC)?

java

我一直在阅读几篇文章,介绍什么是什么JPA (Java Persistent API)以及支持它的供应商(DataNucleus,JBoss
Hibernate等)

我没有ORM(对象关系映射)的经验。

到目前为止,我所做的就是使用DTO和DAO编写自己的数据库类。到目前为止,我对我所拥有的感到满意,但是想知道
为什么人们使用JPA而不是包含SQL的Java文件

对我来说,我觉得编写DAO类可以像下面这样。

public class DAOUsers {
     public void insertNewUser(DTO DtoUser) {
           String query = "INSERT INTO users(username, address) " +
                          "VALUES(DtoUser.username , DtoUser.address)";
           Executor.run(query);
     }

}

我了解到JPA使用JPQL(Java持久查询语言),它针对实体对象而不是直接与db表一起运行。

我的理解(如果我错了,请纠正我)是这里的实体对象与我的DTO对象相同(有点像bean吗?)

但是无论如何.. JPA相对于在文件中编写纯SQL的真正好处是什么?似乎使用了JPA所需的注释并使SQL不可读对我来说真的没有吸引力。

如果您需要进一步说明,请告诉我。我是这个主题的新手,希望听听您的意见。


阅读 358

收藏
2020-12-03

共1个答案

一尘不染

为什么使用JPA而不是直接在Java File上编写SQL查询(即直接写到JDBC)?

某些项目要求工程师将更多的精力放在对象模型上,而不是在用于访问数据存储的实际SQL查询上。这个问题实际上可以解释为

为什么要使用ORM框架?

在不同的情况下可以有不同的答案。

大多数项目都可以从拥有域模型中受益,而持久性则是第二个问题。使用JPA(实现)或大多数其他ORM框架,可以将所有实体(即数据库中的表)建模为Java中的类。此外,还可以将行为嵌入这些类中,从而获得行为丰富的域模型。此模型中的实体可以有多种用途,包括替换DTO以便跨层传输数据的目的。

就是说,在某些地方ORM框架可能无法直接解决该问题,特别是当数据模型已经建立时,或者当正在使用将数据库表映射到Java类的遗留系统时,这并非易事。而且在某些情况下,如果需要从ORM框架生成的SQL中完全消除问题,那么ORM框架通常是不合适的。

2020-12-03