我创建了一个桌面应用程序,并且我已经将它连接到具有数据库连接(bean / class)的MySQL数据库,我可以使用CRUD。我在NetBeans站点上看到他们在Web应用程序上创建了一个连接池。
连接池是否与桌面应用程序上的类/ bean相同?
这是否意味着我创建了一个bean /类,就像一个与DB模型(MVC)连接的桌面应用程序,或者我是否还需要做其他事情?
在Glassfish服务器上,您使用向导执行连接池;在Apache上你没有。我是否必须为Apache创建数据库连接bean?
将数据库连接到Web应用程序的做法(bean,其他什么?)?
我也读过关于Hibernate的内容,但我不明白它的使用。 hibernate在哪里可以帮忙?我的意思是,它是ORM,但Hibernate可以为我做什么,以便我的代码更容易?我想我错过了ORM的观点
答案 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命令。