我正在寻找一个通用项目模板来使用以下技术构建Web应用程序:JSF2,Spring3和Hibernate4
我找到了一个提出模板的article,但我犹豫了,因为我的数据库中的每个表都需要5个类/接口:
这是正常的吗?有人可以帮助建立一个更好的架构吗?
答案 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人经常忘记问自己“我们真的需要这个吗?”。