Hibernate或JPA或JDBC还是?

Yat*_*oel 34 java dao hibernate jpa jdbc

我正在开发一个Java桌面应用程序,但在为持久层选择技术方面存在一些困惑.

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

现在我的问题是如何从我的Java桌面应用程序中使用以下内容?

  • JPA

  • 过冬

  • JDBC

  • DAO

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

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

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

==================================== EDITED ============= ==========================

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

但是我在Java Persistence API中提到的JPA中存在一些问题

duf*_*ymo 52

这是我的看法:

  • JPA:不用将客户端连接到Hibernate,TopLink等的Java持久性的不可知方式.
  • Hibernate:如果您有要映射到的对象模型,那么这是一个很好的选择.
  • JDBC:所有Java持久性都是基于此构建的.最低级别
  • DAO:更多的模式而不是技术; CRUD操作界面.
  • iBatis:JDBC(原始SQL)和Hibernate(ORM)之间的中间点.
  • JDO:Java Data Objects,它是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);
}
Run Code Online (Sandbox Code Playgroud)

如果你的对象用你的五张桌子1:1映射,我会说JPA是过度杀伤力的.

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

YAGNI说你应该保持简单.这是五张桌子!

更改供应商,如果正确执行,则意味着切换JDBC驱动程序JAR,更改驱动程序类名称以及添加新连接URL - 无论您选择何种技术,都必须执行此操作.

我发现数据库不会彻底改变.您将更改架构,但整个供应商?不太可能,特别是如果你有几个客户.制作用户基础交换机数据库将是一个很大的不便.

您打算随身携带哪一个?HSQL还是需要安装MySQL的东西?这是一个更为关注的问题.

  • +1 Google引领我到这里来.当我正在阅读答案时,我想"哦,这个答案写得很好,很容易理解".然后,我检查了作者 - "duffymo",当然! (3认同)

Boz*_*sov 9

JPA当然要走的路是你想要使用对象关系映射 - 它的实现是不可知的(意味着你可以将它与Hibernate,Toplink等一起使用),它是事实上的标准.Hibernate有一个更丰富的功能集,但这是一个非标准的解决方案 - 很多人使用它...我个人总是使用由Hibernate支持的JPA.我试图远离hibernate特定的东西,但如果需要它 - 它就在我身边.

使用JPA/Hibernate这样的框架来表示5个表可能有点过分.您的应用程序将大约5MB,并将消耗更多的内存.您可以选择使用与DAO配对的JDBC.

由于JDBC使用的是特定于供应商(数据库)的SQL,因此您可能会遇到问题,因为您计划使用不同的数据库.JPA在这方面具有明显的优势.

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