我正在使用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插件。
任何建议都赞赏!
保
答案 0 :(得分:2)
看一下spring roo,它使用活动记录模式。
或者(看过roo之后)你可以自己构建它。您所需要的只是:
您可以使用它来注入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,虽然我猜这可能有些过分。