【问题标题】:Hibernate or JPA or JDBC or? [closed]Hibernate 或 JPA 或 JDBC 还是? [关闭]
【发布时间】:2011-02-03 08:49:18
【问题描述】:

我正在开发一个 Java 桌面应用程序,但在为我的持久层选择技术时有些困惑。

到目前为止,我一直在使用 JDBC 进行数据库操作。现在,最近我学习了 Hibernate 和 JPA,但我仍然是这些技术的新手。

现在我的问题是,我的 Java 桌面应用程序要使用什么?

  • JPA

  • 休眠

  • JDBC

  • DAO

  • 您的任何其他建议...

我知道他们没有最好的选择,这完全取决于项目的复杂性和要求,所以以下是我项目的要求

  1. 这不是一个复杂的应用程序。它仅包含 5 个表(和 5 个实体)
  2. 我不想让我的代码变得灵活,以便以后可以轻松更改数据库
  3. 应用程序的大小应尽可能小,因为我必须通过 Internet 将其分发给我的客户。
  4. 必须在商业开发和分发中免费使用。

======================================已编辑========== ==============================

基于以下答案,我想使用 JPA 以防止自己编写特定于供应商的 SQL 代码。

但我在 JPA 中遇到了一些问题,在 Java Persistence API 中提到了这些问题

【问题讨论】:

标签: java hibernate jpa jdbc dao


【解决方案1】:

这是我的看法:

  • JPA:在不将客户端耦合到 Hibernate、TopLink 等的情况下执行 Java 持久性的不可知论方式。
  • 休眠:如果您有要映射到的对象模型,这是一个不错的选择。
  • JDBC:所有 Java 持久性都建立在此之上。最低级别
  • DAO:与其说是技术,不如说是一种模式; CRUD操作界面。
  • iBatis:介于 JDBC(原始 SQL)和 Hibernate (ORM) 之间。
  • JDO:Java 数据对象,它是 Java 持久性的另一个规范。 (例如,Apache JDO

这不是一个复杂的应用程序。它仅包含 5 个表(和 5 个 实体)

这些都可以,但 JDBC 将是最简单的。所有其他的都是建立在 JDBC 之上的。

我想让我的代码灵活,以便以后可以更改数据库 轻松

架构更改将在所有技术中产生类似的效果。

应用程序的大小应尽可能小 必须分发给我的客户 通过互联网。

使用 JPA 或 Hibernate 将需要 JAR,这会增加部署的大小。 JDBC 会尽量减少这种情况。

它必须可以免费用于商业开发和分发。

查看所有技术的许可。应该不会有任何问题。

仅供参考:可以编写通用 DAO 接口:

package persistence;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, K extends Serializable>
{
    T find(K id);
    List<T> find();
    List<T> find(T example);
    List<T> find(String queryName, String [] paramNames, Object [] bindValues);

    K save(T instance);
    void update(T instance);
    void delete(T instance);
}

如果您的对象与您的五个表 1:1 映射,我会说 JPA 是矫枉过正。

您的应用目前是 3MB JAR 的量级吗?如果不是,那么 Hibernate 或 JPA 的大小将增加一倍以上。您可以准确量化多少。而且有不止一个 JAR,因为它们都有依赖关系。

YAGNI 说你应该保持简单。有五张桌子!

更改供应商(如果操作正确)意味着切换 JDBC 驱动程序 JAR、更改驱动程序类名称并添加新的连接 URL - 无论您选择哪种技术,您都必须这样做。

我发现数据库并没有彻底改变。您将更改架构,但整个供应商?不太可能,特别是如果您有多个客户。让用户群切换数据库会带来很大的不便。

您打算与哪一个一起发货? HSQL 或需要像 MySQL 这样的安装的东西?这是一个更相关的问题。

【讨论】:

  • JPA 不需要像 Hibernate 一样的“映射到的对象模型”吗?
  • @matt b:确实如此。与 Hibernate 没有太大区别。
  • 你能看看编辑过的问题吗?
  • "small" 与 Hibernate 或 JPA 不在同一个句子中。
  • +1 Google 把我带到了这里。当我阅读答案时,我想“哦,这个答案写得很好,很容易理解”。然后,我查看了作者——当然是“duffymo”!
【解决方案2】:

如果您想使用对象关系映射,JPA 肯定是要走的路——它与实现无关(意味着您可以将它与 Hibernate、Toplink 等一起使用)并且它是事实上的标准。 Hibernate 有更丰富的功能集,但这是一个非标准的解决方案——尽管很多人都在使用它……我个人总是使用由 Hibernate 支持的 JPA。我尽量远离休眠特定的东西,但如果需要它 - 它就在那里。

不过,将 JPA/Hibernate 等框架用于 5 个表可能有点矫枉过正。您的应用程序将大 5MB 左右,并且会消耗更多的内存。您可以简单地选择将 JDBC 与 DAO 配对使用。

由于 JDBC 使用特定于供应商(数据库)的 SQL,如果您计划使用不同的数据库,这可能会出现问题。 JPA 在这方面具有明显的优势。

无论您选择什么都不会出错 - 您需要问自己主要是增加的大小和内存消耗是一个问题,您是否愿意编写样板 DAO JDBC 代码。我通常讨厌这个:-)

【讨论】:

  • 你能看看编辑过的问题吗?
  • 我似乎为时已晚,但你得到了一些很好的答案:-)
  • 最后两行很棒。
【解决方案3】:

对于这个规模,任何事情都可以正常工作。也可以考虑iBatis

【讨论】:

  • 你能看看编辑过的问题吗?
猜你喜欢
  • 2011-03-15
  • 1970-01-01
  • 2016-08-02
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多