Объединение sql запросов в один класс JDBC

161
19 апреля 2018, 12:59

Для подключения к бд и работы с ней использую две библиотеки commons dbutils и commons dbcp2 (пул подключений к бд).

Есть три класса в которых прописаны запросы к бд. Все эти классы отвечают за свой функционал (не просто так разделил)^

DataBaseUser

public class DataBaseUser {
    private QueryRunner queryRunner;
    public DataBaseUser(BasicDataSource basicDataSource) {
        this.queryRunner = new QueryRunner(basicDataSource);
    }
    ...
}

DataBaseAdmin

public class DataBaseAdmin {
    private QueryRunner queryRunner;
    public DataBaseAdmin(BasicDataSource basicDataSource) {
        this.queryRunner = new QueryRunner(basicDataSource);
    }
    ...
}

DataBaseChat

public class DataBaseChat {
    private QueryRunner queryRunner;
    public DataBaseChat(BasicDataSource basicDataSource) {
        this.queryRunner = new QueryRunner(basicDataSource);
    }
    ...
}

Как видно конструктор у всех один, но методы разные (дубликатов нет).

Хотелось бы создать один класс который бы смог получить доступ ко всем методам этих трех классов. Как правильно такое сделать? сделать класс обертку который в себе будет хранить все три класса? или как.

Еще. использование этих классов сейчас выглядит таким образом:

BasicDataSource basicDataSource = Core.getDataSource();
DataBaseAdmin dbAdmin = new DataBaseAdmin(basicDataSource);
DataBaseChat dbChat = new DataBaseChat(basicDataSource);
...
basicDataSource.getConnection().close();

Тут я беру DataSource который предоставляет библиотека dbcp2 передаю в QuerryRunner который их DbUtils. Он же в свою очередь берет подключение из пула. В последней строке возвращаю подключение в пул свободных.

Answer 1

Именно так "сделать класс обертку который в себе будет хранить все три класса":

    class BusinessLogic {
        private BasicDataSource basicDataSource;
        private DataBaseUser dataBaseUser;
        private DataBaseAdmin dataBaseAdmin;
        private DataBaseChat dataBaseChat;
        public BusinessLogic(
                BasicDataSource basicDataSource,
                DataBaseUser dataBaseUser,
                DataBaseAdmin dataBaseAdmin,
                DataBaseChat dataBaseChat) {
            this.basicDataSource = basicDataSource;
            this.dataBaseUser = dataBaseUser;
            this.dataBaseAdmin = dataBaseAdmin;
            this.dataBaseChat = dataBaseChat;
        }
        public doLogic() {
            //DO MY LOGIC
            basicDataSource.getConnection().close(); //не очень хорошо закрывать подключение здесь, так как подключение должно закрываться там, где открывалось
        }
    }

Только добавить интерфейсы User, Admin, Chat вместо конкретных классов. И в классе использовать интерфейсы.

    class BusinessLogic {
        private BasicDataSource basicDataSource;
        private User user;
        private Admin admin;
        private Chat chat;
        public BusinessLogic(
                BasicDataSource basicDataSource,
                User user,
                Admin dataBaseAdmin,
                Chat dataBaseChat) {
            this.basicDataSource = basicDataSource;
            this.user = user;
            this.admin = admin;
            this.chat = chat;
        }
        public doLogic() {
            //DO MY LOGIC
            basicDataSource.getConnection().close(); //не очень хорошо закрывать подключение здесь, так как подключение должно закрываться там, где открывалось
        }
    }
READ ALSO
Планировщик задач на Java

Планировщик задач на Java

Здравствуйте! Нужно создать "Планировщик задач на Java"Мы с другом надумали:

397
Проблема с памятью в приложении java на centOS

Проблема с памятью в приложении java на centOS

Добрый день! Такая проблема: Есть spring-boot(15

160
Как сделать удаление смахиванием в android

Как сделать удаление смахиванием в android

Есть какая-то строка, как сделать анимацию смахивания, чтобы оно уезжало влево и удалялось (функционал удаления есть, но просто на кнопке)?

187
mediaplayer.getCurrentPosition обновляется рывками

mediaplayer.getCurrentPosition обновляется рывками

Я запускаю поток, который создаю этим методом:

196