0

我们现在正在使用 Spring jdbcTemplate 来实现服务层,但在未来的某个时候我们想转向休眠。我担心当我们迁移到 Hibernate 时,我们当前服务层的设计方式是否有效。

目前我们有:为了清楚起见,我省略了细节

上下文 xml 中的数据源

<bean id="dataSource" destroy-method="close" class="...BasicDataSource">
    <property name="" value="" />
    <property name="" value="" />
    <property name="username" value="" />
    <property name="password" value=""/>      
</bean>

服务等级

@Repository 
public class MyService {
   private JdbcTemplate jdbcTemplate;
        @Autowired
        public void setDataSource (DataSource ds) {
            this.jdbcTemplate = new JdbcTemplate(ds);
        } 
@Transactional 
public void myTransactions () {...}  
} 

控制器:

@Autowired
private MyService  myService;

我在 spring mvc 中看到了很多 hibernate 服务层的实现,其中大多数使用interface. 添加接口有什么好处?我应该interface在我的设计中添加一个吗?过渡到休眠时,这会使事情变得更容易吗?

4

1 回答 1

1

我唯一的建议是使用接口并使用贫血的域模型。这样,您可以毫不费力地使用 spring 切换接口实现。

这就是您使用接口获得的好处。

假设你有这个包装和类:

org.company.samples.dao.Dao // Generic Dao Interface
org.company.samples.dao.DomainEntityDao // Domain Dao extends Generi Dao
org.company.samples.dao.jdbc.BaseDao // Generic implementation of Dao Interface
org.company.samples.dao.jdbc.DomainEntityDaoImpl // Domain Dao implementation extends BaseDao

然后你想切换到休眠,这样你就可以做这个结构

org.company.samples.dao.Dao // Generic Dao Interface
org.company.samples.dao.DomainEntityDao // Domain Dao extends Generi Dao
org.company.samples.dao.hibernate.BaseDao // Generic Hibernate implementation of Dao Interface
org.company.samples.dao.hibernate.DomainEntityDaoImpl // Domain Dao implementation extends BaseDao

如果你在你的 daos 中使用注解,那么在 spring 中从 jdbc 切换到 hibernate 是非常简单的:

而不是这个:

<context:component-scan base-package="org.company.samples.dao.jdbc" />

你为此改变它:

<context:component-scan base-package="org.company.samples.dao.hibernate" />

就是这样,您可以在不更改服务类型的情况下切换您的 daos 实现。

于 2012-10-17T18:35:44.500 回答