gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:49:29 24 4
gpt4 key购买 nike

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

最佳答案

您可以使用 Spring JDBC 轻松完成此操作的 JdbcTemplate .

  • 创建抽象实体基类

    public abstract class YourBaseEntityClass {
    private String fooProperty;
    private Long barProperty;
    // + getters and setters
    }
  • 创建一个通用的 DAO 接口(interface)

    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. 使用 Spring,使用正确的表名和行映射器配置一个新的 GenericDao 实例

就是这样!

关于java - 每个具有相同结构的多个表一个 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com