具有相同结构的多个表一个 DAO

发布于 2024-11-02 18:04:40 字数 123 浏览 4 评论 0原文

我正在使用 Spring 和 Oracle DB,并且由于需要将不同的 XML 文件存储在包含相同列的单独表中,我想使用单个 DAO 对这些表进行操作。我是 Spring 的新手,所以我想问这种方法是否可行,如果可以,那么如何实现。

I'm using Spring and Oracle DB and due to the need for storing different XML files in separate tables containing the same columns, I would like to use a single DAO for operations on these tables. I'm new to Spring, so I'm asking if this approach is possible and if so, then how it can be done.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

随风而去 2024-11-09 18:04:40

您可以使用 Spring JDBC 轻松完成此操作Jdbc模板

  • 创建一个抽象实体基类

    公共抽象类 YourBaseEntityClass {
        私有字符串 fooProperty;
        私人长吧物业;
        // + getter 和 setter
    }
    
  • 创建通用 DAO 接口

    公共接口 Dao; {
        T get(长id);
        // 这里你可能需要更多方法:-)
    }
    
  • 创建通用抽象 RowMapper

    公共抽象类 GenericRowMapper
    实现 RowMapper {
    
        公共 T mapRow(最终结果集 rs, 最终 int rowNum)
        抛出 SQLException {
            最终 T 实体 = instantiateEntityClass();
            entity.setFooProperty(rs.getString("foo"));
            entity.setBarProperty(rs.getLong("bar"));
            返回实体;
        }
    
        受保护的抽象 T instantiateEntityClass();
    
    }
    
  • 创建通用 DAO 实现

    公共类 GenericJdbcDao;实现 Dao {
    
        私有字符串表名;
        公共无效setTableName(最终字符串表名){
            this.表名 = 表名;
        }
    
        私有 JdbcTemplate jdbcTemplate;
        公共无效setJdbcTemplate(最终JdbcTemplate jdbcTemplate){
            this.jdbcTemplate = jdbcTemplate;
        }
    
        私有 RowMapper;行映射器;
        公共无效 setRowMapper(最终 RowMapper rowMapper){
            this.rowMapper = rowMapper;
        }
    
        公共 T get(最终长 id) {
            返回 jdbcTemplate.queryForObject(
                // 请不要这样做,这只是一个简单的例子
                "select * from " + tableName + " where id=" + id, rowMapper);
        }
    }
    

现在,对于每个特定实体类型,您需要:

  1. 子类 YourBaseEntityClass
  2. 子类 GenericRowMapper,以便它创建新的 使用 Spring 的实体类型
  3. ,使用正确的表名和 rowmapper 配置一个新的 GenericDao 实例

就是这样!

You can do it very easily with Spring JDBC's JdbcTemplate.

  • Create an abstract Entity Base class

    public abstract class YourBaseEntityClass {
        private String fooProperty;
        private Long barProperty;
        // + getters and setters
    }
    
  • Create a generic DAO Interface

    public interface Dao<T> {
        T get(Long id);
        // you'll probably want more methods here :-)
    }
    
  • Create a Generic abstract 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();
    
    }
    
  • Create a generic DAO Implementation

    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);
        }
    }
    

Now, for every specific entity type, you need to:

  1. subclass YourBaseEntityClass
  2. subclass GenericRowMapper, so that it creates the new entity type
  3. with Spring, configure a new GenericDao instance with the correct table name and rowmapper

That's it!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文