задний план
первоначальноcode-builderспециально дляMyBatis Enhanceнаписать генератор кода, но только используяEnhanceНо в этом нет ничего нового, поэтому генерация отделена и предоставлена всем для использования в надежде оказать некоторую помощь в повышении эффективности исследований и разработок проекта.
Для чего можно использовать конструктор кода?
code-builderэто генератор кодаmaven mojoПлагин, через простую настройку может завершить базу данныхTableконвертироватьEntityИли другие классы сущностей, способ их создания полностью основан на вашей личной бизнес-логике,code-builderПредоставьте некоторую определенную информацию в базе данных как можно более полной, что позволит вам создавать более удобные и гибкиеJavaдокумент.
Добро пожаловать в публичный аккаунт
加群для получения идентификатора группы связи.
Адрес источника
- Адрес облака кода:git ee.com/sh-wave-with/cod…
- Адрес гитхаба:GitHub.com/Hengyuboyou/От…
Добро пожаловать в 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 -
jdbcTypeJDBC类型,соответствоватьjava.sql.TypesВнутренний тип, тип данных:java.lang.Integer -
jdbcTypeNameJDBC类型名称,тип данных:java.lang.String -
javaProperty格式化后的属性名称,как:userId,тип данных:java.lang.String -
javaTypeJava数据类型短名,как:TimeStamp,тип данных:java.lang.String -
fullJavaTypeJava数据类型全名,как: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
-
运行项目Соответствующий файл может быть сгенерирован в соответствии с конфигурацией
Способ использования плагина Maven
- воплощать в жизнь
mvn cleanкоманда очиститьtargetсодержимое каталога - воплощать в жизнь
mvn compileкоманда для компиляции проекта и генерации实体类
Почему SpringBoot не нужно настраивать информацию о базе данных?
Maven Pluginпуть настраивается数据库连接信息И драйвер подключения к базе данных получает объект подключения к базе данныхConnectionболее поздняя операцияJDBC元数据.
иSpringBootСпособ заключается в непосредственном использовании конфигурации в проектеDataSourceэкземпляр объекта для полученияConnectionОбъект подключения к базе данных, который будет работать позжеJDBC元数据.
Примечание. Если вы являетесь проектом с несколькими источниками данных, он будет использоваться по умолчанию.
primaryЭкземпляр источника данных.