有很多技术可以使用 Java 访问数据。 我正在阅读其中的一些内容,包括:
- JPQL
- 总部
- 标准 API
- 查询dsl
- jOOQ
- 贾曲
- JDBC
- ActiveJDBC
现在我真的因为开销而感到困惑。这些技术之间的主要区别和相似之处是什么?哪些是最常用的?简短比较非常受欢迎。
最佳答案
Java 中数据库访问的基础是 JDBC。它是一个接口(interface)(无实现),允许数据库供应商以标准方式公开他们的数据库,因此 Java 程序员不必从根本上改变他们的代码来支持不同的关系数据库。
也就是说,它接受 SQL,而 SQL 是标准的,有太多的变体,以至于标准不允许跨数据库可移植性。
其他平台倾向于构建在 JDBC 之上,以降低与其他数据库集成的成本。与数据库交互的方式多种多样,基本上您可以改进发出 SQL 命令,或者附加库接管为您编写兼容的 SQL 命令。
两个主要类别是“类数据库”和“对象存储”,其中对象存储侧重于存储 Java 对象,库负责 SQL 生成的大部分细节。
Technology / query language / type / notes
Java Persistance API / JPQL / object store / not an implementation, but an interface allowing multiple implementations, query language is not table specific, but object specific
Hibernate / HQL / object store / a popular Java solution, but tied to Hibernate only.
Java Persistance API / Criteria API / object store / Criteria API is the code (programming) equivalent to the JPQL strings.
Java Persistance API & JDO / QueryDSL API / object store / Java API to build queries similar to Criteria API, but different
JDBC / jOOQ / direct JDBC / Java API that replaces SQL strings construction with method calls that are table centric
H2 database / JaQu / object store / Linked directly to one database, non-portable. Follows Microsoft LINQ syntax.
JDBC / ActiveJDBC / object store / Looks like a branded version of almost-JPA for webapps.
这个空间中的两个基本 API 是 JDBC 和 JDO,如果您只打算支持关系数据库,那么您希望使用的 JDO 子集是 JPA。 JDBC 和 JDO 都不直接提供数据库连接,它们是纯粹的 API。尽管如此,许多数据库供应商推出的 API 并未利用这些技术,我建议不要使用任何不基于 JDBC 和 JPA 的技术。
同样,为了利用多个实现,我还建议您不要使用不基于 JPQL(如果您在字符串中构建查询)或 CriteriaAPI(如果您在代码中构建查询)的查询语言,这两种语言都是JPA 的概念组件。如果您直接使用 JDBC,请对所有已发布的 SQL 使用 PreparedStatements,并记住,虽然您可以将现有的 SQL 代码库与纯 JDBC 解决方案结合使用,但您可能会获得质量更高的实现(并可能更快地交付)使用 JPA,因为在将关系数据库映射到 Java 时存在许多极少数现有数据库代码库处理的极端情况。
关于java - Java访问数据库的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42236021/