SyntaxHighlighter

среда, 20 июня 2018 г.

011. Добавление зависимостей Maven

Благодаря использованию Maven для построения проекта, все необходимые приложению зависимости добавляются путём редактирования pom.xml файла, расположенного в корне директории src.
Создание проекта из архитипа Maven сгенерировал минимальный pom.xml файл:
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mvictorl</groupId>
    <artifactId>gtbmini</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <name>gtbmini Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>gtbmini</finalName>
    </build>
</project>>
Данный файл описывает проект (идентификаторы группы и артифакта, формат - war, версию, имя и т.д.).
Зависимости (библиотеки) располагаются в элементе <dependencies></dependencies>.
Пока что автоматически добавлена библиотека junit версии 3.8.1 с областью видимости test.
Дополнительные зависимости просто добавляются в этот же раздел отдельными элементами <dependency></dependency>.

Для начала добавим библиотеку MySQL-connector для доступа к базе данных MySQL.
Проще всего найти необходимую зависимость на официальном сайте центрального репозитория Maven.
Просто набираем в строке поиска "MySQL" и первая же ссылка предлагает нужный раздел "MySQL Connector/J". Далее выбираем последнюю стабильную версию (или любую нужную) и копируем готовый блок <dependency></dependency>, который и вставляем в pom.xml файл:

Т.к. IntelliJ IDEA автоматически сохраняет pom-файл и постоянно его анализирует, практически сразу после добавления зависимости (при условии, что все необходимые данные корректно введены), она скачивается и добавляется к проекту (слева в разделе Extermal Libraries).

воскресенье, 18 марта 2018 г.

010. Создание проекта

Создаем в IntelliJ IDEA новый проект Maven с использованием архитипа maven-archetype-webapp:
Отмечу, что, возможно, потребуется выбрать JDK - рекомендую не выбирать 9-ю версию Java.

Задаем Id и имя проекта:

Я выбрал Maven, установленный самостоятельно вместо встроенного в IntelliJ:

Подтверждаем имя и расположение проекта:

В правом нижнем углу появится предложение включить автоматическое импортирование Maven, рекомендую нажать Enable Auto-Import (можно так же включить эту опцию позже в настройках):

Создаётся проект web-приложения минимальной конфигурации:

По не понятной для меня причине, архитип Maven не создает полностью структуру каталогов, которую сам же рекомендует. Поэтому придется создавать директорию исходных кодов (sources) src/main/java, а также директории для тестирования src/test/java, и src/test/resources вручную (остальные - по желанию/необходимости):

Не забываем отметить выше указанные создаваемые директории для правильного функционирования IntelliJ IDEA - правой кнопкой мыши на директории, Mark Directory as, и, соответственно, Sources Root, Test Sources Root и Test Resources Root.
Так же назначения директорий можно настроить в свойствах проекта (Project Structure):

Теперь можно создать "именной" пакет, в моем случае это com.mvictorl:

Если компактный вид пакета мешает, то, нажав на "шестерёнку" в заголовке окна справа, снимите галку с Hide Empty Middle Packages:

001. Создание БД

Создаем базу данных (БД) предметной области.
Мне очень понравился бесплатный on-line инструмент https://dbdesigner.net/, который очень прост в использовании, хорошо визуализирован и позволяет выгружать готовый sql-скрипт создания БД.

Я создал небольшой пример с различными типами связей таблиц:

SQL-скрипт данной модели:

CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) NOT NULL UNIQUE,
`user_pass` varchar(150),
`ref_employee` INT,
PRIMARY KEY (`id`)
);
CREATE TABLE `filial` (
`id` INT NOT NULL AUTO_INCREMENT,
`filial_name_full` varchar(250) NOT NULL UNIQUE,
`filial_name_short` varchar(150) UNIQUE,
`filial_chif` INT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `employee` (
`id` INT NOT NULL AUTO_INCREMENT,
`employee_first_name` varchar(50) NOT NULL,
`employee_middle_name` varchar(50),
`employee_last_name` varchar(50) NOT NULL,
`employee_position` varchar(150),
`employee_division` INT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `division` (
`id` INT NOT NULL AUTO_INCREMENT,
`division_name_full` varchar(150) NOT NULL,
`division_name_short` varchar(100),
`parent_division` INT,
`division_chif` INT,
`parent_filial` INT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `link_user_group` (
`user_id` INT,
`group_id` INT
);
CREATE TABLE `group` (
`id` INT NOT NULL AUTO_INCREMENT,
`group_name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
ALTER TABLE `user` ADD CONSTRAINT `user_fk0` FOREIGN KEY (`ref_employee`) REFERENCES `employee`(`id`);
ALTER TABLE `filial` ADD CONSTRAINT `filial_fk0` FOREIGN KEY (`filial_chif`) REFERENCES `employee`(`id`);
ALTER TABLE `employee` ADD CONSTRAINT `employee_fk0` FOREIGN KEY (`employee_division`) REFERENCES `division`(`id`);
ALTER TABLE `division` ADD CONSTRAINT `division_fk0` FOREIGN KEY (`parent_division`) REFERENCES `division`(`id`);
ALTER TABLE `division` ADD CONSTRAINT `division_fk1` FOREIGN KEY (`division_chif`) REFERENCES `employee`(`id`);
ALTER TABLE `division` ADD CONSTRAINT `division_fk2` FOREIGN KEY (`parent_filial`) REFERENCES `filial`(`id`);
ALTER TABLE `link_user_group` ADD CONSTRAINT `link_user_group_fk0` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`);
ALTER TABLE `link_user_group` ADD CONSTRAINT `link_user_group_fk1` FOREIGN KEY (`group_id`) REFERENCES `group`(`id`);

В двух словах описание предметной области:
Таблица user и group - соответственно, пользователи и группы пользователей самой системы (понадобятся в основном для вопросов безопасности - Security).
Связаны между собой таблицей link_user_group для реализации отношения многие-ко-многим между полями таблиц user и group.
Таблица employee - работники организации.
Таблица filial - список филиалов организации.
Таблица division - список всех подразделений (управлений, отделов и т.п.) организации.
Таблица подразделений реализует иерархию через поле-ссылку parent_division (родительское подразделение) на свой же идентификатор id.
Все подразделения имеют родительский филиал - поле parent_filial.
Подразделения и филиалы имеют руководителей, которые определены через поля-ссылки division_chif и filial_chif, соответственно, на поле-идентификатор id таблицы работников employee.
И напоследок, пользователь системы может быть связан с работником организации - поле-ссылка ref_employee таблицы user указывает на поле-идентификатор id таблицы employee.

Создаем инстанс (БД) MySQL с именем gtb_mini, указываем при создании кодировку по-умолчанию (Collation): utf8 - utf8_general_ci.
И запускаем на выполнение наш скрипт. Таблицы и отношения между ними созданы!

011. Добавление зависимостей Maven

Благодаря использованию Maven для построения проекта, все необходимые приложению зависимости добавляются путём редактирования pom.xml файл...