我正在开发Java桌面应用程序,但在为持久层选择技术方面存在一些困惑。
直到现在,我一直在使用JDBC进行数据库操作。现在,最近我学习了Hibernate和JPA,但我仍然是这些技术的新手。
现在我的问题是从以下内容中为我的Java桌面应用程序使用什么?
JPA
Hibernate
JDBC
DAO
您提出的任何其他建议......
我知道他们没有最好的选择,这完全取决于项目的复杂性和重新考虑,所以下面是我项目的要求
==================================== EDITED ========== =============================
根据以下答案,我想使用JPA,以防止自己编写特定于供应商的SQL代码。
中提到的JPA中存在一些问题答案 0 :(得分:50)
这是我的看法:
这不是一个复杂的应用程序。它只包含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的东西?这是一个更为关注的问题。
答案 1 :(得分:8)
JPA当然要走的路是你想要使用对象关系映射 - 它的实现是不可知的(意味着你可以将它与Hibernate,Toplink等一起使用)并且它是事实上的标准。 Hibernate有一个更丰富的功能集,但这是一个非标准的解决方案 - 很多人使用它...我个人总是使用由Hibernate支持的JPA。我试图远离hibernate特定的东西,但如果需要它 - 它就在我身边。
使用JPA / Hibernate这样的框架来表示5个表可能有点过分。您的应用程序将大约5MB,并将消耗更多的内存。您可以选择使用与DAO配对的JDBC。
由于JDBC使用的是特定于供应商(数据库)的SQL,因此您可能会遇到问题,因为您计划使用不同的数据库。 JPA在这方面有明显的优势。
无论你选择什么,你都不会出错 - 你需要问自己的主要是增加的大小和内存消耗是一个问题,你是否愿意编写样板DAO JDBC代码。我一般都讨厌这个: - )
答案 2 :(得分:2)
对于这种规模,任何事情都可行。也请考虑iBatis。