1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/leshalv-screw

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

screw-logo

💕 Инструмент для создания схем баз данных в процессе корпоративной разработки.

LGPL3 wiki Maven Central JDK Version Maven Version

🚀 Screw (шуруп) Англ.: [ˈskruː] ~ Лёгкий и удобный инструмент для генерации схем баз данных.

Рекомендация

Приглашаем вас следить за новыми проектами автора: Первый открыто-источниковый IDaaS/IAM платформа на основе SpringBoot3, поддерживающая OAuth2.x, OIDC, SAML2.0, JWT, CAS и другие стандарты единого входа. Она обеспечивает управление полным жизненным циклом пользователя, единое аутентификационное решение и одноточечный вход. Приглашаем всех звездить проект!

Открытый доступ: https://gitee.com/topiam/eiam## Краткое описание  При работе с корпоративной разработкой мы часто сталкиваемся с необходимостью создания документов по структуре баз данных. За время работы в нескольких компаниях я заметил, что либо таких документов нет вообще, либо они рукописные и требуют постоянного ведения в процессе эксплуатации и развития. Это очень трудоёмкий процесс, который может привести к множеству проблем, если забыть обновить документацию. Поэтому у меня возникло желание создать плагин-инструмент, но из-за недостатка опыта в программировании и ограниченных навыков, мне было сложно реализовать эту идею. Однако, с увеличением опыта работы и накоплением знаний, я начал работу над этим проектом 15 марта 2020 года и завершил первую версию в первой декаде апреля. Хотелось бы довести до совершенства и открыть его для общественного использования, однако из-за занятости на работе времени на это не хватало. В июне, благодаря частым изменениям и доработкам баз данных, я активно использовал свой плагин, что значительно экономило время и решало множество задач. В свободное время я продолжил подготовку к публикации, и 22 июня 2020 года проект был открыт для общего доступа. Приглашаю всех использовать, давать советы и вносить вклад.
  Что касается названия, придумать что-то подходящее оказалось сложнее всего.Но моё умное маленькое мозговое устройство нашло решение — как выразить важность этого маленького инструмента? С детства я учился примеру Льва Ленина, известного своими словами о "шурупах" и "маленьких шестерёнках". Вот цитата из его дневника: «Хотя шуруп и является мелким элементом, а маленькая шестерёнка и вовсе микроскопична, но без них механизм просто не сможет работать. Даже если один шуруп будет плохо закручен или одна шестерёнка повредится, это вызовет проблемы в работе механизма...» Я чувствую, что мой инструмент имеет ту же значимость, хотя он и кажется незначительным. Именно поэтому я назвал его screw (шуруп).

Основные характеристики+ Краткий, легковесный, хорошо спроектированный

  • Поддержка множества баз данных
  • Поддержка различных форматов документов
  • Гибкость в расширении
  • Поддержка пользовательских шаблонов

Поддержка баз данных

  • MySQL
  • MariaDB
  • TiDB
  • Oracle
  • SQL Server
  • PostgreSQL
  • Cache DB (2016)
  • H2 (в разработке)
  • DB2 (в разработке)
  • HSQL (в разработке)
  • SQLite (в разработке)
  • HuoGao (в разработке)
  • Dameng (в разработке)
  • XuGu (в разработке)
  • KingbaseES (в разработке)

Поддержка генерации документов

  • html
  • docx
  • markdown

Примеры сгенерированных документов

  • html

HTML

screw-logo

  • docx

word

  • markdown

markdown

markdown

Способ использования

Обычный способ

  • Добавление зависимости
<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

#### Описание функции

&emsp;&emsp;Функция генерации POJO основана на расширении модуля Screw и находится в начальной стадии разработки. В повседневной разработке после анализа требований и моделирования обычно создаются таблицы в базе данных, а затем начинается разработка кода. Поэтому функция генерации POJO может помочь пользователям сэкономить время на повторяющихся действиях. Эта функция позволяет автоматически создавать объекты POJO на основе существующих таблиц в базе данных. Это значительно упрощает последующую работу по правкам и развитию.

#### Поддержка баз данных

- [x] MySQL 

#### Способ использования

+ **Добавление зависимости**```xml
<dependency>
    <groupId>cn.smallbun.screw</groupId>
    <artifactId>screw-extension</artifactId>
    <version>${lastVersion}</version>
</dependency>
  • Writing code
/**
 * 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 WeChat QQ
ВКонтакте Группа общения в WeChat Группа общения в QQ
  • Сканирование QR-кода для подписки на официальный WeChat аккаунт, чтобы первым узнавать последние новости. Ответьте с screw, чтобы получить номер телефона автора.

Кто использует

Названия отсортированы по порядку регистрации, регистрация используется только для продвижения продукта. Если вы хотите видеть название своей компании, сообщите нам.

  • ООО "Синьнэн Нетворк"
  • ООО "Шуньчжунь Цифровые технологии"
  • ООО "Люцай Масть"
  • ООО "Дебон Логистика"
  • ООО "Бэйге Нетворк"
  • ООО "Хьюм Хэп Информационные технологии"
  • ООО "Цзянда Нетворк"
  • ООО "Цинде Чжун"

Часто задаваемые вопросы

  • После генерации документация показывает некорректные символы?

    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 )

Вы можете оставить комментарий после Вход в систему

Введение

Простой в использовании инструмент для документирования структуры таблиц баз данных, поддерживает базы данных MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB. Развернуть Свернуть
LGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/leshalv-screw.git
git@api.gitlife.ru:oschina-mirror/leshalv-screw.git
oschina-mirror
leshalv-screw
leshalv-screw
master