每张具有相同结构的表中的一个DAO

| 我正在使用Spring和Oracle DB,并且由于需要在包含相同列的单独表中存储不同的XML文件,因此我想对这些表使用单个DAO进行操作。我是Spring的新手,所以我在问这种方法是否可行,如果可以,那么如何实现。     
已邀请:
您可以使用Spring JDBC \的JdbcTemplate轻松完成此操作。 创建一个抽象的Entity Base类
public abstract class YourBaseEntityClass {
    private String fooProperty;
    private Long barProperty;
    // + getters and setters
}
创建一个通用的DAO接口
public interface Dao<T> {
    T get(Long id);
    // you\'ll probably want more methods here :-)
}
创建一个通用的抽象RowMapper
public abstract class GenericRowMapper<T extends YourBaseEntityClass>
implements RowMapper<T> {

    public T mapRow(final ResultSet rs, final int rowNum)
    throws SQLException {
        final T entity = instantiateEntityClass();
        entity.setFooProperty(rs.getString(\"foo\"));
        entity.setBarProperty(rs.getLong(\"bar\"));
        return entity;
    }

    protected abstract T instantiateEntityClass();

}
创建一个通用的DAO实现
public class GenericJdbcDao<T> implements Dao<T> {

    private String tableName;
    public void setTableName(final String tableName) {
        this.tableName = tableName;
    }

    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(final JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    private RowMapper<T> rowMapper;
    public void setRowMapper(final RowMapper<T> rowMapper) {
        this.rowMapper = rowMapper;
    }

    public T get(final Long id) {
        return jdbcTemplate.queryForObject(
            // please don\'t do it like this, this is just a quick example
            \"select * from \" + tableName + \" where id=\" + id, rowMapper);
    }
}
现在,对于每种特定的实体类型,您需要: 子类别
YourBaseEntityClass
子类别
GenericRowMapper
,以便创建新的实体类型 使用Spring,使用正确的表名和rowmapper配置新的GenericDao实例 而已!     

要回复问题请先登录注册