💕 Инструмент для создания схем баз данных в процессе корпоративной разработки.
🚀 Screw (шуруп) Англ.: [ˈskruː] ~ Лёгкий и удобный инструмент для генерации схем баз данных.
Приглашаем вас следить за новыми проектами автора: Первый открыто-источниковый IDaaS/IAM платформа на основе SpringBoot3, поддерживающая OAuth2.x, OIDC, SAML2.0, JWT, CAS и другие стандарты единого входа. Она обеспечивает управление полным жизненным циклом пользователя, единое аутентификационное решение и одноточечный вход. Приглашаем всех звездить проект!
Открытый доступ: https://gitee.com/topiam/eiam## Краткое описание При работе с корпоративной разработкой мы часто сталкиваемся с необходимостью создания документов по структуре баз данных. За время работы в нескольких компаниях я заметил, что либо таких документов нет вообще, либо они рукописные и требуют постоянного ведения в процессе эксплуатации и развития. Это очень трудоёмкий процесс, который может привести к множеству проблем, если забыть обновить документацию. Поэтому у меня возникло желание создать плагин-инструмент, но из-за недостатка опыта в программировании и ограниченных навыков, мне было сложно реализовать эту идею. Однако, с увеличением опыта работы и накоплением знаний, я начал работу над этим проектом 15 марта 2020 года и завершил первую версию в первой декаде апреля. Хотелось бы довести до совершенства и открыть его для общественного использования, однако из-за занятости на работе времени на это не хватало. В июне, благодаря частым изменениям и доработкам баз данных, я активно использовал свой плагин, что значительно экономило время и решало множество задач. В свободное время я продолжил подготовку к публикации, и 22 июня 2020 года проект был открыт для общего доступа. Приглашаю всех использовать, давать советы и вносить вклад.
Что касается названия, придумать что-то подходящее оказалось сложнее всего.Но моё умное маленькое мозговое устройство нашло решение — как выразить важность этого маленького инструмента? С детства я учился примеру Льва Ленина, известного своими словами о "шурупах" и "маленьких шестерёнках". Вот цитата из его дневника: «Хотя шуруп и является мелким элементом, а маленькая шестерёнка и вовсе микроскопична, но без них механизм просто не сможет работать. Даже если один шуруп будет плохо закручен или одна шестерёнка повредится, это вызовет проблемы в работе механизма...» Я чувствую, что мой инструмент имеет ту же значимость, хотя он и кажется незначительным. Именно поэтому я назвал его screw (шуруп).
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>${lastVersion}</version>
</dependency>
```+ **Написание кода**
```java
/**
* Документация генерации
*/
void documentGeneration() {
// Исходные данные
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");
hikariConfig.setUsername("root");
hikariConfig.setPassword("password");
// Настройка получения информации о таблицах
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(2);
hikariConfig.setMaximumPoolSize(5);
DataSource dataSource = new HikariDataSource(hikariConfig);
// Генерация конфигураций
EngineConfig engineConfig = EngineConfig.builder()
// Путь к выходному файлу
.fileOutputDir(fileOutputDir)
// Открытие папки
.openOutputDir(true)
// Тип файла
.fileType(EngineFileType.HTML)
// Тип шаблона генерации
.produceType(EngineTemplateType.freemarker)
// Персонализированное имя файла
.fileName("персонализированное имя файла")
.build();
}
## Недействительные таблицы
ArrayList<String> ignoreTableName = new ArrayList<>();
ignoreTableName.add("test_user");
ignoreTableName.add("test_group");
## Недействительные префиксы таблиц
ArrayList<String> ignorePrefix = new ArrayList<>();
ignorePrefix.add("test_");
## Недействительные суффиксы таблиц
ArrayList<String> ignoreSuffix = new ArrayList<>();
ignoreSuffix.add("_test");
ProcessConfig processConfig = ProcessConfig.builder()
// Установка логики генерации, когда существуют указанные таблицы, префиксы таблиц и суффиксы таблиц, будут сгенерированы только указанные таблицы, остальные таблицы не будут сгенерированы и пропущены конфигурация недействительных таблиц
// Определение имени таблицы для генерации
.
``````markdown
designatedTableName(new ArrayList<>())
// Определение префикса таблицы для генерации
. designatedTablePrefix(new ArrayList<>())
// Определение суффикса таблицы для генерации
. designatedTableSuffix(new ArrayList<>())
// Конфигурация недействительных имён таблиц
. ignoreTableName(ignoreTableName)
// Конфигурация недействительных префиксов таблиц
. ignoreTablePrefix(ignorePrefix)
// Конфигурация недействительных суффиксов таблиц
. ignoreTableSuffix(ignoreSuffix). build();
// Конфигурация
Configuration config = Configuration.builder()
// Версия
. version("1.0.0")
// Описание
. description("Документация по дизайну базы данных")
// Источник данных
. dataSource(dataSource)
// Конфигурация движка
. engineConfig(engineConfig)
// Конфигурация генерации
. produceConfig(processConfig)
. build();
// Выполнение генерации
new DocumentationExecute(config).execute();
}
<build>
<plugins>
<plugin>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-maven-plugin</artifactId>
<version>${lastVersion}</version>
<dependencies>
<!-- HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
<!-- MySQL driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
<configuration>
<!-- username -->
<username>root</username>
<!-- password -->
<password>password</password>
<!-- driver -->
<driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
<!-- url -->
<url>jdbc:mysql://localhost:3306/database</url>
</configuration>
</plugin>
</plugins>
</build>
```--jdbc url-->
<jdbcUrl>jdbc:mysql://127.0.0.1:3306/xxxx</jdbcUrl>
<!-- тип сгенерированного файла -->
<fileType>HTML</fileType>
<!-- открыть директорию вывода файла -->
<openOutputDir>false</openOutputDir>
<!-- тип генерации шаблона -->
<produceType>freemarker</produceType>
<!-- название документа; если пустое - будет использоваться [название базы данных-описание-версия] как название документа -->
<fileName>тестовое название документа</fileName>
<!-- описание -->
<description>генерация документации базы данных</description>
<!-- версия -->
<version>${project.version}</version>
<!-- заголовок -->
<title>документация базы данных</title>
</конфигурация>
<выполнение>
<execution>
<phase>compile</phase>
<цели>
<goal>run</goal>
</цели>
</execution>
</выполнение>
</плугин>
</плugiны>
</build>
```### Используемые статьи+ [Интеграция Spring Boot с Screw для генерации документов баз данных](https://my.oschina.net/mdxlcj/blog/4341399)
+ [Еще ручками собираете документацию по базам данных? Пробуйте этот инструмент](https://mp.weixin.qq.com/s/Bo_U5_cl82hfQ6GmRs2vtA)
+ [Практическое применение! Одним щелчком мыши создаем документацию по базам данных, можно сказать, аналог Swagger для баз данных](https://mp.weixin.qq.com/s/nPwFV7DN8Ogg54_crLlP3g)
### Используемые видео
+ [Использование инструмента Screw для быстрой генерации документов баз данных](https://www.bilibili.com/video/av456302504/)
+ [Микро-персонал: один клик для создания документов по базам данных! Великолепно!](https://mp.weixin.qq.com/s/rUde6XSGSG0jKuy0Wgf1Mw)
## Расширяемые модули
### Генерация POJO
#### Описание функции
  Функция генерации POJO основана на расширении модуля Screw и находится в начальной стадии разработки. В повседневной разработке после анализа требований и моделирования обычно создаются таблицы в базе данных, а затем начинается разработка кода. Поэтому функция генерации POJO может помочь пользователям сэкономить время на повторяющихся действиях. Эта функция позволяет автоматически создавать объекты POJO на основе существующих таблиц в базе данных. Это значительно упрощает последующую работу по правкам и развитию.
#### Поддержка баз данных
- [x] MySQL
#### Способ использования
+ **Добавление зависимости**```xml
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-extension</artifactId>
<version>${lastVersion}</version>
</dependency>
/**
* Generation of POJO
*/
void pojoGeneration() {
// Data source
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/screw");
hikariConfig.setUsername("screw");
hikariConfig.setPassword("screw");
// Setting up table information retrieval
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(2);
hikariConfig.setMaximumPoolSize(5);
DataSource dataSource = new HikariDataSource(hikariConfig);
}
``````markdown
ProcessConfig processConfig = ProcessConfig.builder()
// Указание логики генерации, когда существует указанный столбец, префикс или суффикс таблицы, будет создана указанная таблица, остальные таблицы не будут созданы, и пропущены конфигурации игнорируемых таблиц
// Создание таблицы по имени
.designatedTableName(new ArrayList<>())
// Создание таблицы по префиксу
.designatedTablePrefix(new ArrayList<>())
// Создание таблицы по суффиксу
.designatedTableSuffix(new ArrayList<>()).build(); // Установка конфигураций для генерации POJO
PojoConfiguration config = new PojoConfiguration();
// Установка пути хранения файлов
config.setPath("/cn/smallbun/screw/");
// Установка имени пакета
config.setPackageName("cn.smallbun.screw");
// Установка использования Lombok
config.setUseLombok(false);
// Установка источника данных
config.setDataSource(dataSource);
// Установка стратегии названий
config.setNameStrategy(new HumpNameStrategy());
// Установка логики фильтрации таблиц
config.setProcessConfig(processConfig);
// Выполнение генерации
new PojoExecute(config).execute();
}
![]() |
![]() |
![]() |
---|---|---|
ВКонтакте | Группа общения в WeChat | Группа общения в QQ |
Названия отсортированы по порядку регистрации, регистрация используется только для продвижения продукта. Если вы хотите видеть название своей компании, сообщите нам.
После генерации документация показывает некорректные символы?
MySQL: добавьте ?characterEncoding=UTF-8
в URL.
Проблема вызвана: java.lang.NoSuchFieldError: VERSION_2_3_30?
Проверьте зависимость freemarker проекта, это происходит из-за слишком старой версии. Обновите до версии 2.3.30
. Это происходит из-за слишком низкой версии Oracle драйвера. Удалите или заблокируйте текущую версию драйвера и обновите её до следующих версий:
<зависимость>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</зависимость>
<зависимость>
<groupId>cn.easyproject</groupId>
<artifactId>orai18n</artifactId>
<version>12.1.0.2.0</version>
</зависимость>
```
### Есть ли объяснение таблиц и столбцов в базе данных MySQL, а также в сгенерированной документации?Добавьте `useInformationSchema=true` в URL-адрес.
### Ошибка `java.lang.AbstractMethodError`: `com.mysql.jdbc.JDBC4Connection.getSchema()Ljava/lang/String`
Эта ошибка возникает из-за использования слишком старой версии драйвера MySQL. Обновите ваш драйвер MySQL до последней доступной версии.
## Рекомендованные открытые проекты
| Проект | Описание |
| ------------- |:-------------:|
|[api-boot](https://gitee.com/minbox-projects/api-boot)|Создан для модульного построения API-сервисов|
## Участие в развитии
Мы приглашаем всех желающих принять участие в развитии **screw**, чтобы вместе сделать его лучше и помочь другим разработчикам решать проблемы.
## Лицензия
<img src='https://www.gnu.org/graphics/lgplv3-with-text-154x68.png' alt="Лицензия">
## Поддержка через пожертвования
Мы всегда стремимся предоставлять вам лучший генератор документов для баз данных. Для дальнейшего развития **screw** и процветания нашего сообщества нам нужна ваша поддержка. Цель пожертвований — получить средства для поддержания программ и услуг, которые мы предлагаем. Донаты основаны на добровольности. Мы рекомендуем использовать "перевод денег" через Alipay для моментального пополнения счета. Ваша поддержка является мотивацией для нас, независимо от суммы.
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center"><img src="https://images.gitee.com/uploads/images/2020/0622/161414_c87e1846_1407605.png" width="200" height="200"/></td>
<td align="center"><img src="https://images.gitee.com/uploads/images/2020/0622/161414_e953f85f_1407605.png" width="200" height="200"/></td>
</tr>
<tr>
<td align="center">Alipay</td>
<td align="center">WeChat</td>
</tr>
</table>>**screw** благодарит вас за выбор доверия и поддержки!
Перевод части текста:
>**винт** благодарит вас за выбор доверия и поддержки!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )