Java 中访问数据库的不同方式
Different ways to access database in Java
使用 Java 访问数据的技术有很多。
我正在阅读其中的一些内容,包括:
- JPQL
- HQL
- 条件API
- 查询dsl
- jOOQ
- 贾曲
- JDBC
- 有效JDBC
现在我真的因为开销而感到困惑。这些技术之间的主要区别和相似之处是什么?哪些是最常用的?简短比较非常受欢迎。
Java 中数据库访问的基础是 JDBC。它是一个接口(无实现),允许数据库供应商以标准方式公开他们的数据库,因此 Java 程序员不必从根本上改变他们的代码来支持不同的关系数据库。
也就是说,它接受 SQL,并且 SQL 是标准的,有太多变体,以至于标准不允许跨数据库可移植性。
其他平台倾向于在 JDBC 的基础上构建,以降低与其他数据库集成的成本。与数据库交互的方式多种多样,基本上你可以通过发出 SQL 命令得到改进,或者附加库会为你编写兼容的 SQL 命令。
两大类是"database like"和"object storage",其中对象存储专注于你存储一个Java对象,而库负责[=38的大部分细节=]一代.
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.
此 space 中的两个基本 API 是 JDBC 和 JDO,如果您只打算支持关系数据库,那么您希望使用的 JDO 子集是 JPA。 JDBC 和 JDO 都不直接提供数据库连接,它们是 pure-play API。也就是说,许多数据库供应商推出了不利用这些技术的 API,我建议不要使用任何不基于 JDBC 和 JPA 的技术。
同样,为了利用多个实现,我还建议您不要使用不基于 JPQL(如果您在字符串中构建查询)或 CriteriaAPI(如果您在代码中构建查询)的查询语言,两者这是 JPA 的概念组件。如果您直接使用 JDBC,请对所有已发布的 SQL 使用 PreparedStatements,并记住虽然您可以利用现有的 SQL 代码库和纯 JDBC解决方案,您可能会使用 JPA 获得质量更高的实现(并且可能更快地交付),因为在将关系数据库映射到 Java 时存在很多现有数据库代码库处理的极端情况。
不要写JDBC代码。
你永远不会比 MyBatis and/or Hibernate 做得更好。
相反,学习和使用 MyBatis 或 Hibernate。
MyBatis 更简单(并且很可能足以满足您的任何需求)并且 Hibernate 具有一百万个功能(none 您可能需要)。
- 使用 JDBC API 并注册您的数据库 class 并建立连接。
- 使用 Datasource,您可以在其中定义服务器上的数据库详细信息,例如 WebSphere 或 Weblogic
服务器然后您查找定义的数据源。
- 使用一些 ORM 框架,例如 Hibernate。
使用 Java 访问数据的技术有很多。 我正在阅读其中的一些内容,包括:
- JPQL
- HQL
- 条件API
- 查询dsl
- jOOQ
- 贾曲
- JDBC
- 有效JDBC
现在我真的因为开销而感到困惑。这些技术之间的主要区别和相似之处是什么?哪些是最常用的?简短比较非常受欢迎。
Java 中数据库访问的基础是 JDBC。它是一个接口(无实现),允许数据库供应商以标准方式公开他们的数据库,因此 Java 程序员不必从根本上改变他们的代码来支持不同的关系数据库。
也就是说,它接受 SQL,并且 SQL 是标准的,有太多变体,以至于标准不允许跨数据库可移植性。
其他平台倾向于在 JDBC 的基础上构建,以降低与其他数据库集成的成本。与数据库交互的方式多种多样,基本上你可以通过发出 SQL 命令得到改进,或者附加库会为你编写兼容的 SQL 命令。
两大类是"database like"和"object storage",其中对象存储专注于你存储一个Java对象,而库负责[=38的大部分细节=]一代.
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.
此 space 中的两个基本 API 是 JDBC 和 JDO,如果您只打算支持关系数据库,那么您希望使用的 JDO 子集是 JPA。 JDBC 和 JDO 都不直接提供数据库连接,它们是 pure-play API。也就是说,许多数据库供应商推出了不利用这些技术的 API,我建议不要使用任何不基于 JDBC 和 JPA 的技术。
同样,为了利用多个实现,我还建议您不要使用不基于 JPQL(如果您在字符串中构建查询)或 CriteriaAPI(如果您在代码中构建查询)的查询语言,两者这是 JPA 的概念组件。如果您直接使用 JDBC,请对所有已发布的 SQL 使用 PreparedStatements,并记住虽然您可以利用现有的 SQL 代码库和纯 JDBC解决方案,您可能会使用 JPA 获得质量更高的实现(并且可能更快地交付),因为在将关系数据库映射到 Java 时存在很多现有数据库代码库处理的极端情况。
不要写JDBC代码。 你永远不会比 MyBatis and/or Hibernate 做得更好。
相反,学习和使用 MyBatis 或 Hibernate。
MyBatis 更简单(并且很可能足以满足您的任何需求)并且 Hibernate 具有一百万个功能(none 您可能需要)。
- 使用 JDBC API 并注册您的数据库 class 并建立连接。
- 使用 Datasource,您可以在其中定义服务器上的数据库详细信息,例如 WebSphere 或 Weblogic 服务器然后您查找定义的数据源。
- 使用一些 ORM 框架,例如 Hibernate。