在Java中访问数据库的不同方法

时间:2017-02-14 20:55:08

标签: java database hql jpql criteria-api

使用Java访问数据有很多技术。 我正在阅读其中一些内容,包括:

  • JPQL
  • HQL
  • Criteria API
  • Querydsl
  • jOOQ
  • JaQu
  • JDBC
  • ActiveJDBC

现在我因为开销而感到困惑。这些技术之间的主要区别和相似之处是什么?哪个最常用?简短的比较非常受欢迎。

3 个答案:

答案 0 :(得分:4)

Java中数据库访问的基础是JDBC。它是一个允许数据库供应商以标准方式公开其数据库的接口(无实现),因此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的查询语言(如果您在Strings中构建查询)或CriteriaAPI(如果您在代码中构建查询),这两者都是JPA的概念组成部分。如果您直接使用JDBC,请对所有已发布的SQL使用PreparedStatements,并记住虽然您可以利用纯JDBC解决方案利用现有的SQL代码库,但您可能会获得更好的质量实现(并且可能更快地交付)使用JPA,因为在将关系数据库映射到Java时存在很多极端情况,现有的数据库代码库很少处理。

答案 1 :(得分:1)

不要编写JDBC代码。 你永远不会比MyBatis和/或Hibernate做得更好。

相反,学习并使用MyBatis或Hibernate。

MyBatis更简单(并且很可能足以满足您的任何需求)并且Hibernate具有一百万个功能(您可能不需要这些功能)。

答案 2 :(得分:0)

  1. 使用 JDBC API 并注册您的数据库类并建立连接。
  2. 使用数据源,您可以在其中定义服务器(例如WebSphere或Weblogic)上的数据库详细信息 服务器,然后查找定义的数据源。
  3. 使用某些 ORM框架,例如Hibernate。