3

我正在使用 Spring MVC + JSP + Hibernate 开发一个相当简单的 Web 应用程序。要开始我遵循本教程: http: //www.cavalr.com/blog/Spring_3_and_Annotation_Based_Hibernate_4_Example

这工作正常,但我担心代码的冗长。为了支持 User 实体,我们还有 UserDao、UserDaoImpl、UserService 和 UserServiceImpl。我知道对于大型企业应用程序,您可能确实想要这个。但对于我的简单网络应用程序来说,这是不必要的(和不需要的)复杂性。我可以更简单地在 Python 中实现所有这些。

那么,有没有办法让 Hibernate 使用 Active Record 设计模式呢?我想做的事情是让 User 从基类继承方法,如 get() 。所以你可以做 User.get(userName)

我对使用不同的 ORM 来休眠持开放态度;我刚刚开始,因为这似乎是常见的选择。而且它应该类似于我熟悉的 Python SQLAlchemy。

我也对更多开箱即用的解决方案持开放态度,也许是一个可以自动生成 DAO 类的 IDE 插件。

任何建议表示赞赏!

保罗

4

3 回答 3

2

看看spring roo,它使用了主动记录模式。

或者(在查看 roo 之后)您可以自己构建它。所有你需要的是:

  • @Configurable 在您的实体上启用注入(这也需要真正的 AspectJ)

您可以使用它来注入 EntityManager 或 hibernateSession

于 2013-06-21T12:44:15.773 回答
1

我想你可能正在寻找jOOQ。由于您指的是 Python 的SQLAlchemy,因此 jOOQ 可能比 Hibernate 更匹配,因为它更加以 SQL 为中心。

Java 中另一个流行的 ActiveRecord 实现是ActiveJDBC,它(据我所知)提供了您正在通过检测寻找的那种方法。他们网站上的一个例子:

List<Person> people = Person.where("name = 'John'");
Person aJohn =  people.get(0);
String johnsLastName = aJohn.get("last_name");

(当然,这个答案是有偏见的,因为我是 jOOQ 开发者)

于 2013-06-21T12:44:31.027 回答
1
 UserDao, UserDaoImpl, UserService and UserServiceImpl

这些接口使使用模拟对象的测试更容易,我想如果你不打算使用模拟,你可以摆脱它们。

我有一个用于简单获取/设置的通用DomainRepository - 你不需要服务类,除非涉及多个实体。

为了进一步减少您编写的代码,请查看spring data,尽管我想这里可能有点矫枉过正。

于 2013-06-21T12:51:15.077 回答