Hibernate的活动记录模式

时间:2013-06-21 12:40:00

标签: java spring hibernate orm

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

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

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

我很开心使用不同的ORM来进行Hibernate;我刚刚开始,因为它似乎是常见的选择。它也被认为类似于我熟悉的Python SQLAlchemy。

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

任何建议都赞赏!

3 个答案:

答案 0 :(得分:2)

看一下spring roo,它使用活动记录模式。

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

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

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

答案 1 :(得分: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的开发者)

答案 2 :(得分:1)

 UserDao, UserDaoImpl, UserService and UserServiceImpl

接口可以更轻松地使用模拟对象进行测试,如果你不打算使用模拟,我想你可以摆脱它们。

我有一个通用的DomainRepository用于简单的get / sets - 你不需要服务类,除非涉及到多个参与者。

为了进一步减少你编写的代码,请看一下spring data,虽然我猜这可能有些过分。