2011-04-22 74 views
2

我正在使用Spring和Oracle DB,並且由於需要將不同的XML文件存儲在包含相同列的單獨表中,所以我想使用單個DAO來處理這些表上的操作。我是Spring的新手,所以我在問這種方法是否可行,如果是這樣,那麼它是如何實現的。每個具有相同結構的多個表的一個DAO

+3

爲了獲得答案,您需要重點改進您的問題。特別提供一個你正在談論的例子。就目前來看,這很模糊,這可能是沒有人回答的原因。 – les2 2011-04-22 14:12:36

回答

2

你可以很容易地使用Spring JDBCJdbcTemplate

  • 創建一個抽象的實體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); 
        } 
    } 
    

現在,對於每一個具體的實體類型,您需要:

  1. YourBaseEntityClass
  2. GenericRowMapper,從而創建新的實體類型
  3. with Spring,使用正確的表名和行映射器配置新的GenericDao實例

就是這樣!

相關問題