Добро пожаловать в генератор кода с открытым исходным кодом Code-Builder

задняя часть база данных открытый источник maven

задний план

первоначальноcode-builderспециально дляMyBatis Enhanceнаписать генератор кода, но только используяEnhanceНо в этом нет ничего нового, поэтому генерация отделена и предоставлена ​​всем для использования в надежде оказать некоторую помощь в повышении эффективности исследований и разработок проекта.

Для чего можно использовать конструктор кода?

code-builderэто генератор кодаmaven mojoПлагин, через простую настройку может завершить базу данныхTableконвертироватьEntityИли другие классы сущностей, способ их создания полностью основан на вашей личной бизнес-логике,code-builderПредоставьте некоторую определенную информацию в базе данных как можно более полной, что позволит вам создавать более удобные и гибкиеJavaдокумент.

Добро пожаловать в публичный аккаунт

微信公众号
Обратите внимание на публичный аккаунт WeChat и ответьте加群для получения идентификатора группы связи.

Адрес источника

Добро пожаловать в Code Cloud for Issue, дайте мне звезду, если вам это нравится

Использовать среду

  • Mavenпостроенный проект
  • JDK 1.6версия выше

Метод реализации

Как вы получили информацию из базы данных?

code-builderВнутренне принятыйjava.sql.ConnectionизMetaDataспособ получить метаданные в базе данныхTable,Columnи другую информацию,MetaDataне ограничивается каким-либо типом базы данных, поэтомуcode-builderВ базовом дизайне задача его генерации может быть выполнена в базе данных любого типа, но первоначальная версия поддерживает толькоMySQL,MariaDBЭти два типа баз данных вcode-builderОсновная база данных будет добавлена ​​в более поздней версии обновления.

Сгенерировать выбор шаблона

В настоящее времяcode-builderВнутренне принятыйfreemarkerШаблоны используются для завершения автоматического создания классов сущностей. Шаблоны настраиваются и записываются пользователем. Способ использования других шаблонов зарезервирован внутри. Если вам нужно использовать другие шаблоны, такие как:Velocityи соответствующим образом добавьте сгенерированную бизнес-логику реализации.

Как настроить?

Конфигурация SpringBoot

существует1.0.3.RELEASEверсия добавлена ​​интеграцияSpringBootизstarter, зависимости следующие:

  • использоватьMavenПри создании инструмента скопируйте следующее вpom.xmlв файле конфигурации
<dependency>
    <groupId>com.gitee.hengboy</groupId>
    <artifactId>code-builder-spring-boot-starter</artifactId>
    <version>1.0.3.RELEASE</version>
</dependency>
  • если вы используетеGradleинструменты сборки, а затем скопируйте следующее в свойbuild.gradle
compile group: 'com.gitee.hengboy', name: 'code-builder-spring-boot-starter', version: '1.0.3.RELEASE'

Тогда мыapplication.ymlилиapplication.propertiesКак настроить соответствующие параметры в конфигурационном файле?

hengboy:
  code:
    builder:
      execute: true
      configuration:
        package-prefix: com.code.builder.sample.codebuildersample
        templates:
          -
            name: entity.ftl
            packageName: model
            fileSuffix: Entity
          -
            name: service.ftl
            packageName: service
            fileSuffix: Service
          -
            name: controller.ftl
            packageName: controller
            fileSuffix: Controller
      generator-by-pattern: '%app_user_info%'
      db-type: mysql
      engine-type-enum: freemarker
      builder-dir: classes.templates.builder
      target-dir: generated-sources.java
      tables:
        - app_shop_type
        - app_user_exchange_good
      ignore-class-prefix: App

Подробное описание каждого параметра см. ниже.

Конфигурация пути плагина Maven

так какcode-builderдаMaven mojoсоздан в виде плагина, поэтому нам нужно толькоpom.xmlдобавить в файлpluginКонфигурация плагина следующая:

<plugin>
    <groupId>com.gitee.hengboy</groupId>
    <artifactId>code-builder-maven-plugin</artifactId>
    <version>1.0.3.RELEASE</version>
    <executions>
        <execution>
            <goals>
                <goal>generator</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
    </dependencies>
    <configuration>
        <execute>true</execute>
        <dbType>MySQL</dbType>
        <dbDriverClassName>com.mysql.jdbc.Driver</dbDriverClassName>
        <dbName>xxxx</dbName>
        <dbUserName>xxxx</dbUserName>
        <dbPassword>xxxxx</dbPassword>
        <dbUrl>jdbc:mysql://xxx.xx.xx.xx:3306</dbUrl>
        <tables>
             <table>app_shop_type</table>
             <table>app_user_exchange_good</table>
         </tables>
         <engineType>FREEMARKER</engineType>
         <generatorByPattern>%app_user_info%</generatorByPattern>
         <ignoreClassPrefix>App</ignoreClassPrefix>
         <builderDir>classes.templates.builder</builderDir>
         <builder>
                <packagePrefix>com.code.builder.sample</packagePrefix>
		         <templates>
		              <template>
		                  <name>entity.ftl</name>
		                  <packageName>model</packageName>
		              </template>
		              <template>
		                  <name>service.ftl</name>
		                  <packageName>service</packageName>
		                  <fileSuffix>Service</fileSuffix>
		              </template>
		              <template>
		                  <name>mapper.ftl</name>
		                  <packageName>mapper</packageName>
		                  <fileSuffix>Mapper</fileSuffix>
		               </template>
		         </templates>
         </builder>
    </configuration>
</plugin>

Добавлена ​​зависимость, управляемая базой данных

code-builderОн не ограничен типом используемой вами базы данных, поэтому пользователям необходимо добавить зависимость соответствующего типа данных при создании, например, в приведенной выше конфигурации.MySQLзависимость от базы данных

.....
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</version>
    </dependency>
</dependencies>
.....

просто используяMaven-PluginДобавьте в форму зависимости, управляемые данными

Сгенерированный переключатель управления

не каждый раз编译или打包Когда необходимо создать соответствующую сущность, для этого случаяcode-builderДобавленexecuteпараметры для включения и выключения.

  • true: включить автоматическую генерацию
  • false: отключить автоматическую генерацию

Конфигурация типа базы данных

Перед выполнением автоматической генерации вам необходимо настроить соответствующую информацию о конфигурации базы данных.

  • dbType: тип базы данных, используемый по умолчаниюMySQLТип базы данных.
  • dbDriverClassName: имя класса драйвера базы данных, настройте разные имена классов драйверов в соответствии с различными типами баз данных, значение по умолчанию основано наdbTypeИспользуйте внутренне определенное имя класса, вы можете установить его, если вам нужно его настроить.(仅maven-plugin使用)

Конфигурация базовой информации базы данных (используется только maven-plugin)

  • dbName:Имя базы данных
  • dbUserName:имя пользователя базы данных
  • dbPassword: пароль базы данных
  • dbUrl: путь подключения к базе данных, путь подключения не должен заполнять имя базы данных, правильный пример:jdbc:mysql://localhost:3306

Генерировать таблицы с именами таблиц, которые соответствуют правилам

Создавайте таблицы на основе выражений. Выражения обычно аналогичны выражениям нечетких запросов.generatorByPatternпараметры и установить соответствующее выражение, вы можете сопоставить сгенерированные компоненты в соответствии с выражением.Tableсписок.

  • указанное совпадение префикса
<generatorByPattern>app_order%</generatorByPattern>

Пример: будет соответствоватьapp_order_info,app_order_recordСтол ожидания.

  • указанный суффикс совпадает
<generatorByPattern>%order</generatorByPattern>

Пример: будет соответствоватьapp_good_order,app_exchange_orderСтол ожидания.

  • содержит совпадения
<generatorByPattern>%order%</generatorByPattern>

Пример: будет соответствоватьapp_order_info,app_good_orderСтол ожидания.

Создать указанную таблицу

code-builderПоддержка указания одной или нескольких таблиц для создания, нужно только настроитьtablesпараметры следующим образом:

<tables>
    <table>app_shop_type</table>
    <table>app_user_exchange_good</table>
</tables>

Приведенная выше конфигурация является единственной операцией для этого поколения.app_shop_type,app_user_exchange_goodдве таблицы.

Уведомление:tablesпараметры имеют приоритет надgeneratorByPatternпараметр.

Путь к шаблону требуется для пользовательского компоновщика

code-builderавтоматически найдетclasses/templates/builderшаблон под, если используется значение по умолчаниюfreemarkerшаблон для создания, то место, где хранится шаблон,classes/templates/builder/freemarker. Если вы хотите настроить путь к шаблону, вы можете установитьbuilderDirадрес, здесь потому, что разделители разных операционных систем считаются разными (Windowsсистемный разделитель\,Linuxа такжеO SXРазделитель/), так что здесь мы используем.конфигурация разделителя,code-builderПуть автоматически преобразуется в соответствии с операционной системой, и конфигурация выглядит следующим образом:

<builderDir>classes.code.builder</builderDir>

Уведомление:freemarkerПапки не могут быть изменены, только измененыcode-builderКорневой путь для загрузки шаблонов.

Исключить префиксы после создания сущностей

Дизайн базы данных иногда требует добавления префиксов, таких как:app_,sys_д., префикс после фактической генерации сущности не предназначен для отображения, то параметры конфигурацииignoreClassPrefixПрефикс может быть автоматически исключен следующим образом:

<ignoreClassPrefix>App</ignoreClassPrefix>

Примечание. Из-за замены сгенерированного имени класса здесь должна соблюдаться первая буква правила именования регистра верблюдов, и за один раз можно настроить только один префикс замены.

перед использованиемAppUserInfoEntity,После использованияUserInfoEntity.

Конфигурация шаблона

использоватьtemplatesСписок пользовательских шаблонов для конфигурации тегов, которые можно создать с использованием одного или нескольких шаблонов одновременно:

<templates>
    <template>
        <name>entity.ftl</name>
        <packageName>entity</packageName>
        <fileSuffix>entity</fileSuffix>
    </template>
    <template>
        <name>service.ftl</name>
        <packageName>service</packageName>
        <fileSuffix>Service</fileSuffix>
    </template>
    <template>
        <name>mapper.ftl</name>
        <packageName>mapper</packageName>
        <fileSuffix>Mapper</fileSuffix>
    </template>
</templates>
  • name:freemarkerИмя шаблона в каталоге,必填
  • packageName: имя подпакета после создания файла шаблона,非必填
  • fileSuffix: Суффикс сгенерированного файла, например: суффикс конфигурацииEntity, имя файла после добавления суффиксаUserInfoEntity, первая буква суффикса будет автоматически преобразована в верхний регистр в соответствии с верблюжьим регистром

Встроенные параметры

Модель данных на основе шаблона имеет несколько встроенных параметров,code-builderКаждый подготовленный параметр может использоваться при создании класса сущности.

Параметр таблицы

  • tableName 表名,тип данных:java.lang.String
  • remark 表备注信息,тип данных:java.lang.String
  • entityName 实体类名称,как:user_infoпреобразовать вuserInfo,тип данных:java.lang.String
  • columns 列列表,тип данных:java.util.List<Column>
  • primaryKeys 主键列表,тип данных:java.util.List<Column>
  • hasSqlDateон существуетjava.sql.Dateтип,true:существует,false: не существует, тип данных:java.lang.Boolean
  • hasTimeStampон существуетjava.sql.TimeStampтип,true:существует,false: не существует, тип данных:java.lang.Boolean
  • hasBigDecimalон существуетjava.math.BigDecimalтип,true:существует,false: не существует, тип данных:java.lang.Boolean
Как пользоваться

freemarker模板:${table.xxx}, если имя таблицы используется как${table.tableName}

Параметр столбца

  • columnName 列名,как:user_id,тип данных:java.lang.String
  • primaryKey 是否为主键,тип данных:java.lang.Boolean,true: первичный ключ,false: не первичный ключ
  • foreignKey 是否为外键,тип данных:java.lang.Boolean,true: иностранный ключ,false: не внешний ключ
  • size 列长度,тип данных:java.lang.Integer
  • decimalDigits 小数点精度,тип данных:java.lang.Integer
  • nullable 列是否为空,тип данных:java.lang.Boolean,true:Пусто,false: не пустой
  • autoincrement 是否自增,тип данных:java.lang.Boolean,true: автоматически увеличивающийся столбец,false: Обычный столбец
  • defaultValue 默认值,тип данных:java.lang.String
  • remark 列备注,тип данных:java.lang.String
  • jdbcType JDBC类型,соответствоватьjava.sql.TypesВнутренний тип, тип данных:java.lang.Integer
  • jdbcTypeName JDBC类型名称,тип данных:java.lang.String
  • javaProperty 格式化后的属性名称,как:userId,тип данных:java.lang.String
  • javaType Java数据类型短名,как:TimeStamp,тип данных:java.lang.String
  • fullJavaType Java数据类型全名,как:java.sql.TimeStamp,тип данных:java.lang.String
Как пользоваться

freemarker模板:${column.xxx}, если имя столбца используется как${column.columnName}

Основные параметры

  • className: имя класса, freemarker указывает имя класса файла, сгенерированного шаблоном, настроенного в шаблоне.${className}использовать
  • packageName: имя пакета, freemarker указывает имя пакета сгенерированного файла шаблона, конфигурация в шаблоне${packageName}использовать

Как настроить шаблон?

Ниже приведен простой пример шаблона, основанный на приведенном выше内置参数Содержимое сгенерированного файла можно настроить произвольно.

<#if (packageName)??>
package ${packageName};
</#if>
import lombok.Data;

<#if (table.hasSqlDate)>
import java.sql.Date;
</#if>
<#if (table.hasTimeStamp)>
import java.sql.Timestamp;
</#if>
<#if (table.hasBigDecimal)>
import java.math.BigDecimal;
</#if>
/**
 * <p>本类代码由code-builder自动生成</p>
 * <p>表名: ${table.tableName} - ${table.remark}</p>
 * ===============================
 * Created with code-builder.
 * User:恒宇少年
 * Date:${.now}
 * 简书:http://www.jianshTu.com/u/092df3f77bca
 * 码云:https://gitee.com/hengboy
 * ================================
 */
@Data
public class ${className} {
<#list table.primaryKeys as key>
    /**
     * ${key.columnName} - ${key.remark}
     */
    private ${key.javaType} ${key.javaProperty};
</#list>
<#list table.columns as column>
    <#if (!column.primaryKey)>
    /**
     * ${column.columnName} - ${column.remark}
     */
    private ${column.javaType} ${column.javaProperty};
    </#if>
</#list>
}

Вышеупомянутый объект данныхfreemarkerСодержимое шаблона, сохраните этот шаблон вfreemarkerкаталог, соответствующийtemplatesАвтоматическое создание объекта данных можно завершить, добавив конфигурацию в тег.Содержимое созданного объекта данных выглядит следующим образом:

package com.code.builder.sample.model;
import lombok.Data;

import java.sql.Timestamp;
/**
 * <p>本类代码由code-builder自动生成</p>
 * <p>表名: app_balance_type - 余额类型信息表</p>
 * ===============================
 * Created with code-builder.
 * User:恒宇少年
 * Date:Jul 17, 2018 9:09:13 PM
 * 简书:http://www.jianshTu.com/u/092df3f77bca
 * 码云:https://gitee.com/hengboy
 * ================================
 */
@Data
public class BalanceTypeEntity {
    /**
     * BT_ID - 余额类型主键
     */
    private String btId;
    /**
     * BT_NAME - 余额类型名称
     */
    private String btName;
    /**
     * BT_FLAG - 余额类型标识
     */
    private String btFlag;
    /**
     * BT_CREATE_TIME - 添加时间
     */
    private Timestamp btCreateTime;
    /**
     * BT_MARK - 余额类型备注信息
     */
    private String btMark;
}

Куда делись созданные классы сущностей?

Созданный класс сущности будет находиться вtarget/generated-sources/javaкаталог, если вы настроитеpackagePrefixпараметры, которые будут автоматически созданы в каталоге сборкиpackagePrefixПодкаталог для значений конфигурации. как:

<packagePrefix>com.code.builder.sample</packagePrefix>

Тогда окончательный сгенерированный корневой каталог:target/generated-sources/java/com/code/builder/sample

как пользоваться?

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

  1. 运行项目Соответствующий файл может быть сгенерирован в соответствии с конфигурацией

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

  1. воплощать в жизньmvn cleanкоманда очиститьtargetсодержимое каталога
  2. воплощать в жизньmvn compileкоманда для компиляции проекта и генерации实体类

Почему SpringBoot не нужно настраивать информацию о базе данных?

Maven Pluginпуть настраивается数据库连接信息И драйвер подключения к базе данных получает объект подключения к базе данныхConnectionболее поздняя операцияJDBC元数据.

иSpringBootСпособ заключается в непосредственном использовании конфигурации в проектеDataSourceэкземпляр объекта для полученияConnectionОбъект подключения к базе данных, который будет работать позжеJDBC元数据.

Примечание. Если вы являетесь проектом с несколькими источниками данных, он будет использоваться по умолчанию.primaryЭкземпляр источника данных.