我正在使用 Spring 和 Oracle DB,并且由于需要将不同的 XML 文件存储在包含相同列的单独表中,我想使用单个 DAO 对这些表进行操作。我是 Spring 新手,所以我问这种方法是否可行,如果可以,那么如何实现。
问问题
3033 次
1 回答
2
您可以使用Spring JDBC的JdbcTemplate轻松完成。
创建一个抽象实体基类
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 实例
就是这样!
于 2011-04-29T12:27:35.057 回答