如何在Hibernate和JDBC之间进行选择?

时间:2012-01-03 07:10:40

标签: hibernate orm jdbc

我必须开发一个Java EE项目。在阅读了关于JDBC和Hibernate的不同教程后,我感到很困惑。

阅读完这些教程后,我发现两者都有一些优点和缺点。现在的问题是我如何决定哪一个最好?另外我想知道我将使用JDBC的哪种类型的项目以及我将使用Hibernate的项目类型。

使用我在单个表中有100.000条记录的测试应用程序,我注意到使用JDBC时我可以在3到4秒内获取所有记录。当我使用Hibernate时需要12到14秒。

为什么Hibernate的性能如此糟糕,我怎样才能将Hibernate的性能提升到接近JDBC的性能呢?

3 个答案:

答案 0 :(得分:1)

我不是hibernate的专家,虽然我只是指出了几点我为什么喜欢hibernate而不是简单的jdbc。

我在maven项目中使用了hibernate和JPA注释

  1. 您可以使用注释创建所有模型并定义关系。然后运行一个maven命令根据我的模型创建整个关系数据库,表和关系。这样可以节省大量时间

  2. Hibernate会根据你的getter和setter将结果集转换成你的模型。与jdbc不同,你不必将你自己的结果集提取到模型中。你节省了很多时间

  3. Hibernate通常会急切地获取所有关系对象。所以你不必费心去编写连接查询。(你总是可以指定你是否想要提取/延迟获取)

  4. 4.有保存,更新,删除的方法,您可以将模型实例作为参数传递

    因此,如果您打算编写一个随着时间的推移而增长的Java EE项目,并且您希望节省一些时间来编写额外的类,那么您可以使用Hibernate。所有这些都来自我的小经验。但是你可以在hibernate中做更多的事情。请参考hibernate docs

答案 1 :(得分:0)

那么无论你进入什么类型的项目,Hibernate都会让你的生活更轻松。这使数据库操作更接近您的域模型。您使用java类的约定查询数据库,只是如何访问java中的字段,这与您在查询中指定字段的原因相同(而不是键入SQL,每次键入查询时都需要交叉检查哪个字段由哪个列名称)。此外,hibernate会在命中数据库查询后返回域对象,如果您查看JDBC,您必须自己构建所有这些内容,这总是有用的。

总而言之,如果你在一个相对较小的项目中工作,你也可以使用JDBC,但是在中大型项目中,使用一些ORM解决方案总是有帮助的,而不一定是Hibernate。

答案 2 :(得分:0)

这不是“两种情况”。除了Hibernate之外,还有很多有趣的ORM solutions。除非你有一个特别的数据库密集型算法,否则我不太关心性能。您应该考虑学习曲线和源代码可维护性。我的ORM库力求简单的学习曲线和最少的编程:sormula