按计划对所有派生的DAO类运行公共查询

时间:2018-03-08 19:20:57

标签: java jdbc scheduling dao spring-jdbc

我有一个包含常用方法的抽象类:

public abstract class AbstractDAO<T> implements IFindTradeDAO {


    @Autowired
    private JdbcTemplate jdbcTemplate;


    @Override
    public List<Trade> findOne(final int eventId) {
        return jdbcTemplate.query(getOneQuery(), new Object[]{eventId}, new RowMapper());
    }

    @Override
    public List<Event> getAll() {
        return jdbcTemplate.queryForList(getAllQuery(), Event.class);
    }


    protected abstract String getOneQuery();

    protected abstract String getAllQuery();

}

提供类型特定查询的派生类:

@Repository
public class TypeA extends AbstractDAO implements IFindTradeDAO {

    private static final String FIND = "sql/findA.sql";

    private static final String GET = "sql/getA.sql";


    @Override
    protected String getOneQuery() {
        return FIND;
    }

    @Override
    protected String getAllQuery() {
        return GET;
}

@Repository
public class TypeB extends AbstractDAO implements IFindTradeDAO {

    private static final String FIND = "sql/findB.sql";

    private static final String GET = "sql/getB.sql";


    @Override
    protected String getOneQuery() {
        return FIND;
    }

    @Override
    protected String getAllQuery() {

    }

}

鉴于我有这个类结构,我想为所有派生类sql调用getAllQuery(),例如使用

按计划TypeATypeB

org.springframework.scheduling.annotation.Scheduled;

   @Component
    public class GetAllEvents {

        @Scheduled
        public void processUnprocessedEvents() {
           //invoke getAllQuery for all DAOS and combine results

        }

    }

我不太确定如何推导出一个会调用全部的Component?有没有技术或例子可以用来实现这个目标?

1 个答案:

答案 0 :(得分:1)

我不是Java程序员,但在.NET中你需要将它们全部放入某种类型的列表或数组中,并在每个项目上调用该函数。

因此,可以创建一个名为Add(IFindTradeDAO dao)的方法,将每个方法添加到列表中。然后在每个项目上调用该方法。