Java - JDBC alternatives [已关闭]

2022-08-31 14:52:22

这只是理论问题。

我将JDBC与我的Java应用程序一起使用数据库(选择,插入,更新,删除或其他)。我制作了“手动”Java类,它将包含来自DB表的数据(属性= db列)。然后,我进行查询(ResultSet)并用数据填充这些类。我不确定,如果这是正确的方法。

但是我读过很多关于JDO和另一个持久性解决方案的文章。

有人可以根据他们的经验推荐最常用的JDBC替代品吗?

我还想知道JDO相对于JDBC的优势(用简单的话说)。

我已经能够谷歌很多这些东西,但来自“第一手”的意见总是最好的。

谢谢


答案 1

Java中数据库持久性的故事已经很长了,充满了曲折:

  • JDBC是一个低级API,每个人都在最后使用它来与数据库通信。但是,如果不使用更高级的API,您必须自己完成所有繁重的工作(编写SQL查询,将结果映射到对象等)。

  • EJB 1.0 CMP Entity Beans 是更高级别 API 的第一次尝试,并且已被大型 Java EE 提供商(BEA、IBM)成功采用,但未被用户采用。实体 Bean 太复杂,开销太大(理解,性能较差)。失败!

  • EJB 2.0 CMP 试图通过引入本地接口来降低实体 Bean 的一些复杂性,但大部分复杂性仍然存在。EJB 2.0 也缺乏可移植性(因为对象关系映射不是规范的一部分,因此部署描述符是专有的)。失败!

  • 然后是JDO它是对象持久性的数据存储不可知标准(可以与RDBMS,OODBMS,XML,Excel,LDAP一起使用)。但是,虽然有几个开源实现,虽然JDO已被小型独立供应商采用(主要是OODBMS供应商希望JDO用户以后从他们的RDBMS数据存储切换到OODBMS - 但这显然从未发生过),但它未能被大型Java EE玩家和用户采用(因为编织在开发时是一种痛苦并吓唬一些客户, 一个奇怪的查询API,实际上太抽象了)。因此,虽然标准本身并没有死,但我认为它是失败的。失败!

  • 事实上,尽管存在两个标准,但像Toplink,一个老玩家或Hibernate这样的专有API已经被用户优先于EJB CMP和JDO,因为反对关系数据库持久性(标准之间的竞争,JDO的定位不明确,CMP的早期失败和糟糕的营销在这方面有一部分责任我相信),而Hibernate实际上成为该领域事实上的标准(这是一个伟大的开源框架)。成功!

  • 然后Sun意识到他们必须简化事情(更一般地说是整个Java EE),他们在Java EE 5中使用JPA(Java Persistence API)做到了这一点,JPA是EJB 3.0的一部分,是对象到关系数据库持久性的新标准。JPA统一了EJB 2 CMP,JDO,Hibernate和TopLink API /产品,并且在EJB CMP和JDO失败的地方似乎取得了成功(易用性和采用)。成功!

总而言之,Java的数据库持久性标准是JPA,应该优先于其他专有API(使用Hibernate的JPA实现是可以的,但使用JPA API),除非ORM不是你需要的。它提供了比JDBC更高级的API,旨在为您节省大量手动工作(这是简化的,但这就是想法)。


答案 2

如果你想自己编写SQL,并且不想要ORM,你仍然可以从一些框架中受益,这些框架隐藏了所有繁琐的连接处理(try-catch-finally)。最终你会忘记关闭一个连接...

一个非常易于使用的框架是Spring JdbcTemplate


推荐