数据库连接池和数据库连接?

时间:2011-03-01 08:10:37

标签: java hibernate

我创建了一个桌面应用程序,并且我已经将它连接到具有数据库连接(bean / class)的MySQL数据库,我可以使用CRUD。我在NetBeans站点上看到他们在Web应用程序上创建了一个连接池。

连接池是否与桌面应用程序上的类/ bean相同?

这是否意味着我创建了一个bean /类,就像一个与DB模型(MVC)连接的桌面应用程序,或者我是否还需要做其他事情?

在Glassfish服务器上,您使用向导执行连接池;在Apache上你没有。我是否必须为Apache创建数据库连接bean?

将数据库连接到Web应用程序的做法(bean,其他什么?)?

我也读过关于Hibernate的内容,但我不明白它的使用。 hibernate在哪里可以帮忙?我的意思是,它是ORM,但Hibernate可以为我做什么,以便我的代码更容易?我想我错过了ORM的观点

2 个答案:

答案 0 :(得分:0)

Hibernate将帮助您进行事务管理。它将使您能够打开与数据库的多个不同连接,并在使用不可用对象(例如从不同线程中引入的bean)时向您发出警告。

当您查询数据库时,Hibernate的ORM将使代码更容易的具体示例。您可以使用Criteria - 查询。

,而不是将标准SQL查询编写为字符串

答案 1 :(得分:-1)

在Java中,数据库连接始终使用JDBC驱动程序。我所知道的数据库不允许在单个连接上同时运行多个SQL命令,因此如果您的应用程序可以同时运行多个SQL命令,则每个连接都会成为瓶颈( Web服务器的通常情况,其中数百个用户可以同时与数据库交互。)

更新:我所说的是:您可以通过单个连接(例如UPDATE ... ; COMMIT)轻松地菊链连接命令,但不能发送两个UPDATE命令同时 - 您必须等待第一个命令完成才能发送下一个命令。有些数据库允许在单个查询中发送多个命令,但它们一个接一个地执行 而不是同时执行。想一想:如果你可以通过一个连接同时运行多个命令,你怎么知道它们的执行顺序是什么?

最重要的是,对于大多数数据库来说,创建数据库连接是很昂贵的。因此,它们在应用程序启动期间提前创建并保存在池中。只要您使用池化JDBC驱动程序“连接”到数据库,它就会从池中选择一个未使用的连接并返回它。那(几乎)不花时间。当您“关闭”连接时,它将返回到池中。

作为额外的好处,池可以保持连接活跃。因此,当您需要新连接时,您永远不必担心连接错误(只要数据库正在运行)。

从应用程序方面来说,这是透明的(大多数JDBC驱动程序在今天内部池中,或者它们具有池化API)。如果您的JDBC驱动程序没有,您可以始终使用像DBCP这样的池。该池处理所有令人讨厌的细节,您可以针对池API编写应用程序,而不是直接使用JDBC。文档会告诉你如何做到这一点。

Hibernate是如何与众不同的野兽。 Hibernate是一个基于JDBC的层,可以将POJO转换为SQL并返回。

所以不要说INSERT INTO data(ID, VALUE) values (?, ?),而是说

class Pojo { long id; String value; }
Pojo demo = new Pojo();
demo.value = "Test";

session.persist(demo);

并且Hibernate将为您创建SQL并将其发送到DB。在这个阶段,它不会让你的生活更轻松。当你改变你的Pojos时,Hibernate开始闪耀:

class Pojo { long id; String value; 
    String name; // Oops ... forget the name
}
Pojo demo = new Pojo();
demo.name = "John";
demo.value = "Test";

session.persist(demo);

Hibernate将相应地更改数据库定义并更新加载和保存对象所需的所有SQL命令。