2013-03-05 27 views
1

我要尋找一個一般的項目模板構建具有以下技術的web應用程序接口:JSF2,Spring3和Hibernate4許多類/與一般的項目模板

我發現一個article是提出了一種模板,但我猶豫了東陽在我的數據庫中的每個表我需要5類/接口:

  • 2接口(DAO +服務)
  • 2類實現
  • 1豆

這樣很正常嗎?有人可以幫助更好的建築?

回答

2

我會在Spring Data JPA模塊之上構建架構。這將爲您留下一個類的實體和一個接口(在正常情況下)存儲庫。

欲瞭解更多信息,請看看Spring docs

縮短的實施例:

Spring配置:

<!-- 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; 
+0

很好的答案 – Hidalgo 2013-03-05 14:06:04

2

如果將CGLib作爲依賴項包含在內,則可以刪除接口。除非你從一開始就有不同的服務實現,否則你不需要它們。只有在真正需要時才介紹它們(1:1服務:如果你問我,ServiceImpl是反模式)。

Hibernates/JPAs EntityManager已經是通用的CRUD DAO,所以你不必爲每個實體創建一個DAO。儘快將其引入,並在您的服務中使用EntityManager

聲明:這是一種精益的Java EE方法,非常接近Adam Bien在其Java EE Patterns中的建議。我們對春天進行了改造,目前效果很好。

順便問一句,java的人經常忘記問自己「我們真的需要這個嗎?」。

+0

非常豐富 – Hidalgo 2013-03-05 14:06:22