我要尋找一個一般的項目模板構建具有以下技術的web應用程序接口:JSF2,Spring3和Hibernate4許多類/與一般的項目模板
我發現一個article是提出了一種模板,但我猶豫了東陽在我的數據庫中的每個表我需要5類/接口:
- 2接口(DAO +服務)
- 2類實現
- 1豆
這樣很正常嗎?有人可以幫助更好的建築?
我要尋找一個一般的項目模板構建具有以下技術的web應用程序接口:JSF2,Spring3和Hibernate4許多類/與一般的項目模板
我發現一個article是提出了一種模板,但我猶豫了東陽在我的數據庫中的每個表我需要5類/接口:
這樣很正常嗎?有人可以幫助更好的建築?
我會在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;
如果將CGLib作爲依賴項包含在內,則可以刪除接口。除非你從一開始就有不同的服務實現,否則你不需要它們。只有在真正需要時才介紹它們(1:1服務:如果你問我,ServiceImpl是反模式)。
Hibernates/JPAs EntityManager
已經是通用的CRUD DAO,所以你不必爲每個實體創建一個DAO。儘快將其引入,並在您的服務中使用EntityManager
。
聲明:這是一種精益的Java EE方法,非常接近Adam Bien在其Java EE Patterns中的建議。我們對春天進行了改造,目前效果很好。
順便問一句,java的人經常忘記問自己「我們真的需要這個嗎?」。
非常豐富 – Hidalgo 2013-03-05 14:06:22
很好的答案 – Hidalgo 2013-03-05 14:06:04