java - 为什么使用 JPA 而不是使用 JDBC 编写 SQL 查询?

标签 java database jpa jdbc orm

我一直在阅读几篇文章,什么是 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?)

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

如果您需要更多说明,请告诉我,我是这个主题的新手,想听听一些意见。

最佳答案

Why use JPA instead of directly writing SQL query on Java File (i.e. directly to JDBC) ?

某些项目要求工程师更多地关注对象模型,而不是用于访问数据存储的实际 SQL 查询。这个问题其实可以理解为

Why should one use an ORM framework ?

在不同的上下文中可以有不同的答案。

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

也就是说,在某些地方 ORM 框架可能无法直接解决该问题,尤其是当数据模型已经建立时,或者当您正在处理将数据库表映射到 Java 类的遗留系统时琐碎的练习。而且在某些情况下,如果需要彻底调整 ORM 框架生成的 SQL,那么 ORM 框架通常不适合。

相关问题

  1. Java EE Architecture - Are DAO's still recommended when using an ORM like JPA 2?
  2. Using an ORM or plain SQL?
  3. ORM vs Handcoded Data Access Layer

关于java - 为什么使用 JPA 而不是使用 JDBC 编写 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406310/

相关文章:

java - 如何创建 GWT 中检查的对象列表?

php - 使用 dropzone 在一个请求中上传多个文件时遇到问题

sql-server - 分层数据结构设计(嵌套集)

hibernate - @EntityListeners 注解导致 TypeNotPresentExceptionProxy 错误

java - 如何从远程服务器的 Shell 脚本运行 java -jar 命令?

java - JOptionPane 信息消息

java - Java servlet 中的属性文件调用

database - Docker如何管理数据库?

Spring Data JPA - 具体实体类的依赖注入(inject)

java - 如何在 JPA XML 映射文件中使用 AttributeConverter(JPA 2.1)?