这只是理论上的问题。
我在我的 Java 应用程序中使用 JDBC 来使用数据库(选择、插入、更新、删除或其他)。 我制作“手动”Java 类,其中将包含来自 DB 表(属性 = db 列)的数据。然后我进行查询(ResultSet)并用数据填充这些类。我不确定,如果这是正确的方法。
但我已经阅读了很多关于 JDO 和其他持久性解决方案的文章。
有人可以根据他们的经验推荐最常用的 JDBC 替代品吗?
我也想知道 JDO 相对于 JDBC 的优势(简单来说)。
我已经在谷歌上搜索了很多这样的东西,但“第一手”的意见总是最好的。
谢谢
最佳答案
Java 中数据库持久化的故事已经很长,曲折:
JDBC 是每个人最终都使用 与数据库通信的低级 API。但如果不使用更高级别的 API,您必须自己完成所有繁重的工作(编写 SQL 查询、将结果映射到对象等)。
EJB 1.0 CMP Entity Beans 是高级 API 的首次尝试,已被大型 Java EE 提供商(BEA、IBM)成功采用,但并未被用户采用。实体 Bean 太复杂且开销太大(理解,性能不佳)。 失败!
EJB 2.0 CMP 试图通过引入本地接口(interface)来降低实体 Bean 的一些复杂性,但大部分复杂性仍然存在。 EJB 2.0 也缺乏可移植性(因为对象-关系映射不是规范的一部分,因此部署描述符是专有的)。 失败!
然后是 JDO,它是对象持久性的数据存储不可知标准(可与 RDBMS、OODBMS、XML、Excel、LDAP 一起使用)。但是,虽然有几个开源实现,并且虽然 JDO 已被小型独立供应商采用(大多数 OODBMS 供应商希望 JDO 用户以后从他们的 RDBMS 数据存储切换到 OODBMS ——但这显然从未发生过),但它未能被被大型 Java EE 玩家和用户采用(因为编织在开发时很痛苦并且吓坏了一些客户,奇怪的查询 API 实际上太抽象了)。因此,虽然标准本身并没有死,但我认为它是失败的。 失败!
确实,尽管存在两个标准,但用户更喜欢使用专有 API,如 Toplink、旧播放器或 Hibernate,而不是 EJB CMP 和对象到关系数据库持久性的 JDO(标准之间的竞争、JDO 的定位不明确、CMP 的早期失败和糟糕的营销我相信在这方面有部分责任)和 Hibernate 实际上成为该领域事实上的标准(这是一个很好的开放源框架)。 成功!
然后 Sun 意识到他们必须简化事情(更一般地说是整个 Java EE),他们在 Java EE 5 中使用 JPA(Java Persistence API,它是EJB 3.0 是对象到关系数据库持久性的新标准。 JPA 统一了 EJB 2 CMP、JDO、Hibernate 和 TopLink API/产品,似乎在 EJB CMP 和 JDO 失败的地方取得了成功(易于使用和采用)。 成功!
总而言之,Java 的 数据库持久性 标准是 JPA 并且应该优先于其他专有 API(使用 Hibernate 的 JPA 实现很好,但使用 JPA API),除非ORM 不是您所需要的。它提供了比 JDBC 更高级别的 API,旨在为您节省大量手动工作(这很简单,但就是这样)。
关于Java - JDBC 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397016/
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
“输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.