Я работаю с Spring Boot над проектом. JDbcNamedTemplates используются в моих DAO для доступа к данным. Я пишу запросы в своих даос, а затем сопоставляю некоторые параметры во время выполнения, чтобы получить правильные данные.Обработка имен разных таблиц с использованием JDBCTemplate в Spring Application
Теперь я должен обрабатывать данные из нескольких идентичных таблиц в зависимости от запроса. Логика поиска такая же, за исключением того, что мне нужно использовать разные имена таблиц. JdbcTemplate не позволяет использовать имена таблиц в качестве параметров. Я не хочу использовать форматирование строк, поскольку я хочу, чтобы мои запросы были окончательными.
Я мог бы создать абстрактный класс с большей частью функциональности и конкретными классами, которые расширяют его, чтобы обрабатывать различия в именах таблиц (в основном, имеют метод getTableName() "). Это работает. Тем не менее, похоже, что я создаю много классов, и я хотел бы создать меньше их.
Есть ли лучшие способы сделать это?
Я думал, что использование интерфейсов для определенных таблиц будет приятным, но я не могу обернуть голову тем, как это может работать с Spring и Autowiring.
UPDATE:
Просто давая пример того, что я хотел бы улучшить. До сих пор у меня есть пара абстрактных DAO вроде этого. Они ведут разговор с базой данных.
public abstract class Dao1 {
private static final String PARAM = "p";
private final String QUERY1 = " SELECT * FROM " + getTableName() + " WHERE something";
//here we would also have autowired jdbcNamedTemplate and maybe some other stuff.
public getAll() {
//map parameters, do query return results
}
protected abstract String getTableName();
}
Далее у меня есть пара объектов доступа к данным, которые реализуют абстрактный метод getTableName(). Так что, если бы таблица была «Осень», я бы это сделал.
@Component
public class AutumnDao1 extends Dao1 {
@Override
protected String getTableName() {
return "AUTUMN";
}
}
Так как в примере выше вы можете видеть, что для каждого абстрактного дао я должен был бы сделать пару бетонных Daos (осень, зима, весна, лето). Это приемлемо на данный момент, но в какой-то момент это может вырасти до довольно значительной коллекции daos.
Я хотел бы знать, есть ли способ избежать этого, например, создавая только один класс/интерфейс для каждого «сезона»/имени и каким-то образом дорабатывая его до Dao1, Dao2 и т. Д. По мере необходимости. Я знаю только, какое имя имеет значение при поступлении запроса пользователя.
«Мне нужно обрабатывать данные из нескольких идентичных таблиц в зависимости от запроса. Логика поиска такая же, за исключением того, что мне нужно использовать разные имена таблиц» - можете ли вы дать образец – kuhajeyan
Вы можете попробовать использовать интерфейсы и внедрить различные реализации с помощью bean @Qualifier. – Nano
@Nano, я ноб с аннотациями. Не могли бы вы рассказать о том, как это могло бы работать с учетом моего последнего обновления? – Riv