许多类/接口与一般项目模板

时间:2013-03-05 12:26:34

标签: spring hibernate templates jsf-2

我正在寻找一个通用项目模板来使用以下技术构建Web应用程序:JSF2,Spring3和Hibernate4

我找到了一个提出模板的article,但我犹豫了,因为我的数据库中的每个表都需要5个类/接口:

  • 2个接口(dao + service)
  • 2个实施课程
  • 1 bean

这是正常的吗?有人可以帮助建立一个更好的架构吗?

2 个答案:

答案 0 :(得分:2)

我会在Spring Data JPA模块之上构建架构。这将为您提供实体的一个类和存储库的一个接口(在正常情况下)。

有关详细信息,请查看Spring docs

缩短示例:

Spring config:

<!-- Directory to scan for repository classes -->
<jpa:repositories
   base-package="x.y.z.repositories" />

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
  <property name="jpaDialect">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
  </property>
</bean>

<bean id="entityManagerFactory"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
      <property name="generateDdl" value="true" />
      <property name="database" value="HSQL" />
    </bean>
  </property>
</bean>

实体:

@Entity
public class Product {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private Long id;

  @NotNull
  private String name;
}

存储库:

public interface ProductRepository extends CrudRepository<Product, Long> {

  public List<Product> findByName(String name);

}

为了使用存储库,您只需要注入它:

@Autowired
private ProductRepository productRepository;

答案 1 :(得分:2)

如果将CGLib包含为依赖项,则可以删除接口。除非您从一开始就有不同的服务实现,否则您将不需要它们。只有在真正需要的情况下才会介绍它们(1:1服务:如果你问我,ServiceImpl就是反模式)。

Hibernates / JPA EntityManager已经是一个通用的CRUD DAO,因此您不必为每个实体创建DAO。必要时尽快介绍它们,并在您的服务中使用EntityManager,直到那时为止。

免责声明:这是一种精益的Java EE方法,非常接近Adam Bien在其Java EE Patterns一书中所建议的内容。我们在春季进行了调整,到目前为止工作正常。

顺便提一句,java人经常忘记问自己“我们真的需要这个吗?”。