Прощай фронтенд! Чистая система управления Java, эта структура очень крута в использовании!

Spring Boot Java
Прощай фронтенд! Чистая система управления Java, эта структура очень крута в использовании!

Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…

Резюме

Система управления часто требует, чтобы серверная и клиентская части были реализованы вместе. Операции CRUD с одной таблицей часто похожи, и мы можем использовать генераторы кода для их реализации. Иногда нашей системе управления нужны только несколько простых CRUD-страниц.Есть ли какой-нибудь фреймворк, который может сделать систему управления на чистой Java без написания внешнего кода? Здесь мы рекомендуем полноценный фреймворк классов Erupt, надеюсь, он будет полезен всем!

Введение в извержение

Erupt — низкий код全栈类каркас, который используетJava 注解Динамически генерируйте страницы и фоновые функции, такие как добавление, удаление, изменение, проверка и контроль разрешений. Нулевой интерфейсный код, нулевой CURD, автоматическое создание таблицы, нужно только一个类文件+ Простая настройка аннотаций, быстрая разработка системы фонового управления корпоративного уровня.

основное использование

Давайте сначала перейдем к реальной битве, взяв в качестве примера управление товарными брендами, чтобы ознакомиться с основным использованием Erupt в сочетании со SpringBoot!

SpringBoot интегрирует Erupt

Поскольку Erupt изначально поддерживает SpringBoot, интеграция очень удобна!

  • Чтобы облегчить управление версиями Erupt, мы сначалаpom.xmlДобавьте атрибут версии Erupt в;
<properties>
    <erupt.version>1.6.13</erupt.version>
</properties>
  • позжеpom.xmlДобавлено управление полномочиями Erupt, безопасность данных, фоновый веб-интерфейс и зависимости драйвера MySQL;
<dependencies>
    <!--用户权限管理-->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-upms</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!--接口数据安全-->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-security</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!--后台WEB界面-->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-web</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!--Mysql数据库驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
</dependencies>
  • изменить проектapplication.ymlфайл, добавьте источник данных и конфигурацию JPA;
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
  jpa:
    show-sql: true
    generate-ddl: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: mysql
  • в проектеresourcesСоздайте следующие файлы конфигурации в каталоге (скопируйтеmall-tiny-eruptв);

  • Добавьте класс конфигурации Java EruptEruptConfig, чтобы начать урокMallTinyApplicationПакет должен преобладать, настройте путь кода сканирования пакета;
/**
 * Created by macro on 2021/4/13.
 */
@Configuration
@ComponentScan({"xyz.erupt","com.macro.mall.tiny"})
@EntityScan({"xyz.erupt","com.macro.mall.tiny"})
@EruptScan({"xyz.erupt","com.macro.mall.tiny"})
public class EruptConfig {
}
  • Создать в MySQLeruptбазы данных, затем используйте класс запуска для запуска проекта вeruptСледующие таблицы автоматически создаются в базе данных;

  • После успешного запуска проекта вы можете напрямую получить доступ к странице входа, пароль учетной записи по умолчаниюerupt:erupt, адрес доступа к проекту:http://localhost:8080/

  • После успешного входа в систему он перейдет на домашнюю страницу проекта.Мы можем обнаружить, что мы не написали ни строчки внешнего кода, но имеем полное управление разрешениями и функции управления словарем.Разве это не здорово!

Реализация однотабличного CRUD

Используйте основные аннотации@Eruptи@EruptFieldОпределение класса сущностей может быстро завершить операции CRUD. Давайте попробуем в качестве примера управление брендом продукта.

  • Нет необходимости в контроллере, сервисе, дао, только один класс сущностей может завершить CRUD, сначала мы создаем класс сущностейPmsBrand;
@Erupt(name = "商品品牌")
@Table(name = "pms_brand")
@Entity
public class PmsBrand {

    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "native")
    @Column(name = "id")
    @EruptField
    private Long id;

    @EruptField(
            views = @View(title = "品牌名称"),
            edit = @Edit(title = "品牌名称",notNull=true,search = @Search(vague = true))
    )
    private String name;

    @EruptField(
            views = @View(title = "品牌首字母"),
            edit = @Edit(title = "品牌首字母",notNull=true)
    )
    private String firstLetter;

    @EruptField(
            views = @View(title = "品牌LOGO"),
            edit = @Edit(title = "品牌LOGO", type = EditType.ATTACHMENT,
                    attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    )
    private String logo;

    @EruptField(
            views = @View(title = "品牌专区大图"),
            edit = @Edit(title = "品牌专区大图", type = EditType.ATTACHMENT,
                    attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    )
    private String bigPic;

    @EruptField(
            views = @View(title = "品牌故事"),
            edit = @Edit(title = "品牌故事")
    )
    private String brandStory;

    @EruptField(
            views = @View(title = "排序"),
            edit = @Edit(title = "排序")
    )
    private Integer sort;

    @EruptField(
            views = @View(title = "是否显示"),
            edit = @Edit(title = "是否显示")
    )
    private Boolean showStatus;

    @EruptField(
            views = @View(title = "品牌制造商"),
            edit = @Edit(title = "品牌制造商")
    )
    private Boolean factoryStatus;

    private Integer productCount;

    private Integer productCommentCount;

}
  • После того, как создание успешно, перезапустите проект, в菜单维护добавить звонок в商品меню первого уровня;

  • Затем добавьте еще один, называемый品牌管理вторичное меню, обратите внимание, чтобы выбрать хороший菜单类型и上级菜单,входить类型值это имя класса класса сущностиPmsBrand;

  • После того, как меню будет успешно добавлено, обновите страницу, появится полная функция управления брендом, давайте попробуем новое дополнение;

  • Снова взглянув на страницу со списком запросов, вы увидите, что мы передаем@EditАннотация, которая преобразует поля класса сущности в различные элементы управления вводом, такие как текстовые поля, поля загрузки изображений, переключатели и поля значений.

Основная аннотация Описание

Несколько основных аннотаций Erupt можно узнать из кода в PmsBrand!

@Erupt

  • имя: имя функции
  • desc: описание функции

@EruptField

  • представления: конфигурация отображения таблицы
  • редактировать: изменить конфигурацию элемента
  • sort: внешний порядок отображения, чем меньше число, тем выше

@View

  • title: имя столбца таблицы
  • desc: описание столбца таблицы
  • тип: форма отображения данных, по умолчанию АВТО, что может быть выведено в соответствии с типом атрибута
  • показать: отображать ли

@Edit

  • title: имя столбца таблицы
  • desc: описание столбца таблицы
  • type: тип редактирования, по умолчанию AUTO, который можно вывести на основе типа атрибута
  • показать: отображать ли
  • notNull: требуется ли
  • поиск: будет ли поддерживаться поиск, search = @Search(vague = true) включит расширенную стратегию запросов

Модуль расширения

Конечно, функций Erupt гораздо больше, и он также объединяет множество практических системных функций, включая запланированные задачи, генераторы кода, системный мониторинг и поддержку NoSQL.

задача на времяerupt-job

С помощью функции временной задачи мы можем определить временную задачу в коде, а затем управлять задачей в графическом интерфейсе, о котором немного упоминалось ранее.PowerJob ощущение!

  • Сначала нам нужноpom.xmlдобавлено вerupt-jobсвязанные зависимости;
<!--定时任务erupt-job-->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-job</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • позжеapplication.ymlДобавьте конфигурацию почты (иначе запуск сообщит об ошибке);
spring:
  mail:
    username: xxxxxx@qq.com
    password: 123456
    host: smtp.exmail.qq.com
    port: 465
    properties:
      mail.smtp.ssl.auth: true
      mail.smtp.ssl.enable: true
      mail.smtp.ssl.required: true
  • Затем создайте класс реализации временной задачи.JobHandlerImpl,существуетexecДобавьте в метод код выполнения задачи по времени;
/**
 * Created by macro on 2021/4/13.
 */
@Service
@Slf4j
public class JobHandlerImpl implements EruptJobHandler {
    @Override
    public String exec(String code, String param) throws Exception {
        log.info("定时任务已经执行,code:{},param:{}",code,param);
        return "success";
    }
}
  • После перезапуска приложения в任务维护Добавьте временную задачу для выполнения каждые 5 секунд;

  • После успешного добавления запланированная задача начинает выполняться, нажмите в списке задач日志кнопку для просмотра журнала выполнения.

Генератор кодаerupt-generator

Если вам сложно писать классы сущностей вручную, вы также можете использовать генератор кода в Erupt.

  • существуетpom.xmlдобавлено вerupt-generatorсвязанные зависимости;
<!-- 代码生成器 erupt-generator -->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-generator</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • существует代码生成В меню мы можем напрямую добавлять таблицы и поля, как в Navicat, для генерации кода класса сущностей;

  • Мы можем найти в процессе добавления, что Erupt поддерживает编辑类型довольно много, столько, сколько30своего рода;

  • После успешного добавления нажмите на элемент списка代码预览Кнопка может напрямую генерировать код и копировать его в свой собственный проект.

Мониторинг системыerupt-monitor

Используя функцию мониторинга системы Erupt, мы можем просматривать конфигурацию сервера, использование кэша Redis и информацию о пользователях в Интернете.

  • существуетpom.xmlдобавлено вerupt-monitorсвязанные зависимости;
<!--服务器监控 erupt-monitor-->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-monitor</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • Поскольку необходимо использовать Redis, он должен быть вapplication.ymlДобавьте конфигурацию Redis в и включите функцию хранения Redis для сеанса;
spring:
  redis:
    host: localhost # Redis服务器地址
    database: 1 # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password: 123456 # Redis服务器连接密码(默认为空)
    timeout: 3000ms # 连接超时时间
erupt:
  # 开启redis方式存储session,默认false,开启后需在配置文件中添加redis配置
  redisSession: true
  • пройти через服务监控меню, вы можете просмотреть информацию о процессоре сервера, памяти и виртуальной машине Java;

  • пройти через缓存监控меню, вы можете просмотреть информацию о Redis, статистику команд и статистику Redis Key;

  • пройти через在线用户меню, вы можете просмотреть онлайн-информацию о пользователе, а также можете заставить пользователя выйти из системы!

Источник данных NoSQLerupt-mongodb

Erupt поддерживает несколько источников данных, в том числе: MySQL, Oracle, PostgreSQL, H2 и даже MongoDB. Давайте испытаем функции поддержки MongoDB.

  • существуетpom.xmlдобавлено вerupt-mongodbсвязанные зависимости;
<!--NoSQL数据源 erupt-mongodb-->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-mongodb</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • Поскольку вам нужно использовать MongoDB, вам нужноapplication.ymlДобавьте конфигурацию MongoDB в;
spring:
  data:
    mongodb:
      host: localhost # mongodb的连接地址
      port: 27017 # mongodb的连接端口号
      database: erupt # mongodb的连接的数据库
  • Возьмем в качестве примера упрощенную версию товарного менеджмента или знакомую рутину, добавимPmsProductкласс сущности;
/**
 * Created by macro on 2021/4/13.
 */
@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  //此注解表示使用MongoDB来存储数据
@Document(collection = "product")
@Erupt(
        name = "商品管理",
        orderBy = "sort"
)
public class PmsProduct {
    @Id
    @EruptField
    private String id;

    @EruptField(
            views = @View(title = "商品名称", sortable = true),
            edit = @Edit(title = "商品名称", search = @Search(vague = true))
    )
    private String name;

    @EruptField(
            views = @View(title = "副标题", sortable = true),
            edit = @Edit(title = "副标题", search = @Search(vague = true))
    )
    private String subTitle;

    @EruptField(
            views = @View(title = "价格", sortable = true),
            edit = @Edit(title = "价格")
    )
    private Double price;

    @EruptField(
            views = @View(title = "商品图片"),
            edit = @Edit(title = "商品图片", type = EditType.ATTACHMENT,
                    attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    )
    private String pic;

    @EruptField(
            views = @View(title = "状态", sortable = true),
            edit = @Edit(title = "状态",
                    boolType = @BoolType(trueText = "上架", falseText = "下架"),
                    search = @Search)
    )
    private Boolean publishStatus;

    @EruptField(
            views = @View(title = "创建时间", sortable = true),
            edit = @Edit(title = "创建时间", search = @Search(vague = true))
    )
    private Date createTime;
}
  • Отличие от предыдущей работы MySQL заключается в@EruptDataProcessorВ аннотации указано, что MongoDB используется для хранения данных,@TableАннотации используют вместо@Documentаннотация;
@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  //此注解表示使用MongoDB来存储数据
@Document(collection = "product")
@Erupt(
        name = "商品管理",
        orderBy = "sort"
)
public class PmsProduct {
    //...省略若干代码
}
  • Далее в菜单维护добавить商品管理меню, обновите, чтобы увидеть эту функцию.

Разработка онлайн-интерфейсаerupt-magic-api

Наконец, я представлю волшебную функцию, которая предназначена для разработки интерфейсов непосредственно через интерфейс пользовательского интерфейса, без определения объектов Java, таких как контроллер, сервис, дао, картограф, XML и VO!

  • существуетpom.xmlдобавлено вerupt-magic-apiсвязанные зависимости;
<!--在线接口开发 erupt-magic-api-->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-magic-api</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • существуетapplication.ymlдобавлено вmagic-apiсоответствующая конфигурация;
erupt:
  # 设置具体哪些包被jackson消息转化而不是gson
  jacksonHttpMessageConvertersPackages:
    - org.ssssssss

magic-api:
  web: /magic/web
  # 接口配置文件存放路径
  resource.location: D:/erupt/magic-script
  • Мы можем пройти прямоmagic-apiИспользуйте свой собственный определенный скрипт для запроса, например следующий скрипт, который используется для запроса всех брендов;
var sql = "select * from pms_brand";    
return db.select(sql);
  • существует接口配置Вы можете напрямую добавить этот скрипт в меню, чтобы реализовать интерфейс запроса списка брендов без дополнительного кодирования;

  • Получите доступ к интерфейсу прямо в браузере и обнаружите, что интерфейс был создан автоматически, разве это не здорово!

Суммировать

Если вам нужно построить систему фонового управления с несложным бизнесом, Erupt — хороший выбор! Это избавляет вас от написания внешнего кода! Но если на стороне спроса много требований к интерфейсу, а бизнес-логика более сложная, то фронтенд придется реализовывать самостоятельно!

использованная литература

Официальная документация:Woohoo Yuque.com/erupts/ И диск U…

Адрес исходного кода проекта

GitHub.com/macro-positive/…

Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!