想要使db层通用,而不是绑定spring的JdbcDaoSupport

时间:2012-04-01 14:52:18

标签: java spring spring-mvc

当前我有一个单独的maven模块用于我的数据库访问,我的所有DAO类都继承自:

public class GenericDaoImpl<T> extends JdbcDaoSupport implements GenericDao<T> {
}

我的maven模块具有弹簧依赖性:

org.springframework spring-orm

所以典型的Dao类看起来像:

public class UserDaoImpl extends GenericDaoImpl<User> implements UserDao {

    @Override
    public void insert(User user) {
        getJdbcTemplate().update("insert into users(...)...");
    }
}

我的Dao使用dataSource bean自动装配。

我可以以某种方式制作这个通用,这样我可以继续在我的Spring MVC应用程序中使用它,但如果我需要在cron作业服务类型环境中使用这个库,它会工作吗?(没有必须将春天的应用环境引入图片中。)

1 个答案:

答案 0 :(得分:1)

我开始观察以下内容:

  • 您有一个GenericDao<T>,这意味着您可以有不同的实现。
  • 目前,您有GenericDaoImpl<T> extends JdbcDaoSupport这意味着除非您以手动方式准备所有对象,否则无法在没有任何应用程序上下文的情况下使用您所描述的其他环境。

所以我的建议是:

  • 允许GenericDao<T> extends org.springframework.jdbc.core.JdbcOperations
  • 开发AbstractGenericDao<T> implements GenericDao<T>以提供您需要的抽象通用功能。
  • 开发一个MyEnvGenericDao<T> extends AbstractGenericDao<T>,负责提供数据源以及您需要的不同方法的底层实现;可以使用直接的Hibernate / OpenJPA实现来直接执行查询。
  • 开发一个SpringGenericDao<T> extends JdbcDaoSupport implements GenericDao<T>已经有一个getJdbcTemplate()来执行您需要的操作,并被委托给Spring JDBC模板。在此方案中,您需要将操作委派给JdbcDaoSupport.getJdbcTemplate()

与Maven相关,那么您实际上可以为MyEnvSpring实现提供不同的模块,但两者都有一个父级可以访问GenericDao<T>接口。