使用Java访问数据有很多技术。 我正在阅读其中一些内容,包括:
现在我因为开销而感到困惑。这些技术之间的主要区别和相似之处是什么?哪个最常用?简短的比较非常受欢迎。
答案 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)