2
我正在使用Spring和Oracle DB,並且由於需要將不同的XML文件存儲在包含相同列的單獨表中,所以我想使用單個DAO來處理這些表上的操作。我是Spring的新手,所以我在問這種方法是否可行,如果是這樣,那麼它是如何實現的。每個具有相同結構的多個表的一個DAO
我正在使用Spring和Oracle DB,並且由於需要將不同的XML文件存儲在包含相同列的單獨表中,所以我想使用單個DAO來處理這些表上的操作。我是Spring的新手,所以我在問這種方法是否可行,如果是這樣,那麼它是如何實現的。每個具有相同結構的多個表的一個DAO
你可以很容易地使用Spring JDBC的JdbcTemplate。
創建一個抽象的實體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
,從而創建新的實體類型就是這樣!
爲了獲得答案,您需要重點改進您的問題。特別提供一個你正在談論的例子。就目前來看,這很模糊,這可能是沒有人回答的原因。 – les2 2011-04-22 14:12:36