1

参考这篇文章,我正在考虑开始一个新的基于 Web 的 Java 项目。由于我不了解 Spring/Hibernate,我担心在创建新项目时开始学习它们是否是一个糟糕的计划,特别是因为它会减慢早期开发。

我的一个想法是使用我知道的技术编写原型即 JSP/Servlets/JDBC,因为我可以以我目前的知识更快地运行它。然后我可以扔掉整个事情并从 Spring 等重新开始,但我想考虑将一个小型项目从 JSP/Servlets/JDB 重构为 SpringMVC/Hibernate 有多么容易?我的数据库当然可以重复使用,但是其他代码呢……我是否希望将大部分代码保存到 MVC 框架中,或者范式转变是否足够大,这会造成比它避免的更多的麻烦?


请使用其他问题获取有关选择技术的更一般性建议

4

4 回答 4

3

我建议您从 Spring 开始并使用它的 JDBC 模板,然后将 Hibernate 排除在外,直到它工作为止。

Spring 将鼓励您使用接口,这意味着您将实现与方法签名分开。您可以使用 Spring 启动并运行所有内容,并在准备好后将 JDBC DAO 换成其 Hibernate 等效项。

我一次只能处理一件我不知道的事情。如果你也这样,请听从我的建议,单独从 Spring 开始。

于 2010-05-25T12:15:30.557 回答
1

+1 @duffymo 的建议。Hibernate 真的是一头野兽,对于习惯于直接编写 SQL 代码的人来说,切换到 ORM 工具尤其困难。我的意思是我花了一段时间才适应 Hibernate 为我完成所有工作,因为我只是不相信它会比我的“真棒”SQL 代码做得更好。但是,随着时间的推移,我学会接受 Hibernate 做得很好,前提是您正确配置了它。:)

所以,@john,我将首先从 JSP + Servlet + Spring 开始,就像 @duffymo 提到的那样。将您的 DAO 类转换为使用 Spring 的 JbcTemplate。这迫使您为现有的 DAO 类创建接口。确保你的 DAO 类是无状态的,我的意思是,它应该是。有了它,您可以轻松地在测试用例中测试它的废话。

为了让你的 servlet 使用这些 DAO,你需要做这样的事情......

ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
SomeDao dao = (SomeDao) ctx.getBean("someDao");
dao.doStuff(..);

获取 DAO 的“有点难看”的代码的原因是 Spring 无法将 DAO 直接连接到您的 servlet,因为此时 Spring 不管理您的 servlet。

一旦你完成了所有这些工作,你应该对 Spring 的 IoC 是如何工作的有一些了解。现在,您可以换出您的 servlet 并将其替换为 Spring MVC。我建议您使用 Spring MVC 3.x,以便您可以以宁静的方式构建您的 Web 部件。相信我,老实说,它比 Spring MVC 2.x 更容易、更干净。

好的,当你有 JSP + Spring MVC + Spring + JdbcTemplate 工作时,我认为这是将你的数据库模块从 JdbcTemplate 交换到 Hibernate 的好时机。由于您按接口编码,因此不会对其他模块造成连锁反应。另外,您可以重用完全相同的测试用例来测试您的 Hibernate DAO 类的废话。甜蜜的。:)

...这就是您最终使用 JSP + Spring MVC + Spring + Hibernate 的方式。:)

把这整个事情分解成更小的块使它更容易学习和消化。至少,当事情开始发展时,你不会间接地提高你的脏话词汇量,试图找出问题所在。

于 2010-05-25T19:45:10.337 回答
0

我建议要么不使用 Spring/Hibernate,要么立即使用它。

Hibernate,还有 Spring,对数据和流程的建模影响很大。将应用程序从 JSP/JDBC 移植到 Spring/Hibernate 可能并不总是那么容易,尤其是当您开始考虑事务边界时。

我个人的建议是买一本像样的 Hibernate + Spring 书,然后从那里开始。

于 2010-05-25T11:16:11.553 回答
0

如果您遵循良好的编程实践,那么转换将很容易。servlet 可以成为控制器,而 jsp 可以按原样重复使用以成为视图。当然,如果您正在做诸如在 JSP 中包含业务逻辑之类的事情,那么进行转换将更加困难。如果您已经有一个数据抽象层,那也很好。

这将是一个有趣的实验,将帮助您更好地理解 Hibernate 和 Spring 的优势。您可能会发现这些技术提供的许多东西,您已经在艰难地独自完成它们。

于 2010-05-25T11:22:05.437 回答