B station cloud E office Vue + SpringBoot projeto de separação de front e back end - arquitetura MVC de três camadas para construir um projeto em segundo plano

Este projeto vem do Cloud E Office da Estação B. As notas classificam o processo de construção do projeto e os pontos de conhecimento envolvidos. Para aprender não basta copiar e colar o código, mas saber o que é e por que é. Espero que minhas notas possam lhe fornecer ideias e agradeço correções de todos os parceiros.

Diretório de notas de estudo de front-end do projeto

B station cloud E office Vue + SpringBoot projeto de separação de front e back end - construir projeto vue.js

B station cloud E office Vue + SpringBoot projeto de separação de front e back end - o front end obtém dinamicamente o diretório do menu

1. Introdução ao Projeto

Este projeto é baseado em Vue+Spring Boot para construir um projeto de separação front-end e back-end. Este projeto implementa um sistema de escritório online para gerenciar assuntos diários de escritório: aprovação diária de processos, notícias, avisos, anúncios, informações de arquivos, finanças, pessoal, despesas, ativos, administração, projetos, escritório móvel, etc. Fácil de gerenciar através de software. Em termos de tecnologia, este projeto adota o modelo de desenvolvimento de separação front-end e back-end mais convencional e usa Spring Boot, a estrutura de código aberto mais popular do setor e uma comunidade muito ativa, para construir o back-end, com o objetivo de realizar o sistema de escritório on-line do E-office na nuvem. Incluindo gestão de cargos, gestão de cargos, gestão de departamentos, gestão de funcionários, gestão de salários, chat online e outros módulos. O projeto também usará componentes de terceiros convencionais na indústria para expandir seu conhecimento e conjunto de habilidades. O front-end só precisa escrever o código do cliente de forma independente, e o back-end só precisa escrever o código do servidor de forma independente para fornecer a interface de dados. A estrutura do projeto é projetada da seguinte forma:

2. Arquitetura técnica de back-end

Estrutura de desenvolvimento principal de back-end: SpringBoot+Spring MVC+MyBatisPlus.

  • Para construir um esqueleto de projeto do zero, é melhor escolher tecnologias adequadas e familiares que sejam fáceis de expandir no futuro e adequadas para sistemas de microsserviços. Portanto, Springboot é geralmente usado como base do nosso framework, que é inseparável.
  • Então, para a camada de dados, costumamos usar o Mybatis, que é fácil de usar e manter. Porém, operações de tabela única são difíceis, principalmente ao adicionar ou reduzir campos, o que é complicado, então aqui recomendo usar o Mybatis Plus (https://mp.baomidou.com/), que nasceu para simplificar o desenvolvimento e só precisa de recursos simples configuração, você pode executar operações CRUD rapidamente, economizando muito tempo.
  • Considerando que o projeto pode precisar implantar vários servidores, nossas sessões e outras informações precisam ser compartilhadas neste momento. Redis é o middleware de cache principal agora e também é adequado para nosso projeto.
  • Então, como o front e o backend são separados, usamos jwt como nossas credenciais de identidade do usuário. Use Spring Security para autenticação de segurança e gerenciamento de autoridade. Redis é usado para armazenamento em cache, RabbitMq é usado para enviar e-mails, EasyPOI é usado para importar e exportar dados de funcionários e WebSocket é usado para bate-papo online.

Estrutura de segurança: Spring Security

Token: JWT

Código de verificação gráfica: Kaptcha

Cache: redis

Importação e exportação de documentos: EasyPOI

Enfileiramento de mensagens: RabbitMQ faz processamento assíncrono, enviando e-mails

Componente de correio: Correio

Bate-papo ao vivo: WebSocket

Servidor de arquivos: FastDFS

Banco de dadosMySQL+Redis

3. Arquitetura MVC de três camadas

A camada Controlador chama o método da camada de Serviço, e a camada de Serviço chama o método da camada Dao, e os parâmetros da chamada são passados ​​​​pela camada de Entidade. Em geral, isso torna a lógica de negócios mais clara e a escrita de código mais conveniente. Na verdade, trata-se de fornecer uma regra que permita reunir o mesmo tipo de código, formando assim uma hierarquia, de forma a atingir o objetivo de desacoplamento hierárquico, reutilização e facilidade de teste e manutenção. Nosso projeto adotará essa arquitetura simples de três camadas (DAO + Serviço + Controlador) por um longo tempo, e espero que todos possam entender aos poucos a divisão de trabalho entre esses três módulos. Aqui faço um breve resumo, primeiro tenho uma impressão preliminar:

DAO é usado para interação direta com o banco de dados, definindo operações como adição, exclusão, modificação, etc. O serviço é responsável pela lógica de negócios, e os códigos relacionados às funções geralmente são escritos aqui. Escreva e chame vários métodos para operar nos dados obtidos pelo DAO. O controlador é responsável pela interação dos dados, ou seja, receber Os dados enviados pelo front end são processados ​​​​chamando o Serviço e retornados

 Em um projeto específico, o processo é o seguinte:

Controlador -> interface de serviço -> serviceImpl -> interface dao -> daoImpl -> mapeador -> db

4. Preparação do projeto - importação de banco de dados

1. Endereço do banco de dados:

Link: https://pan.baidu.com/s/1PMIJdX3xXvKa0UrAtvUZ1Q?pwd=ay2b
Código de extração: ay2b

2. Preparação de banco de dados

Crie um novo banco de dados yeb, selecione utf8mb4 como conjunto de caracteres do banco de dados e importe o script do banco de dados yeb.sql colocado na pasta do banco de dados. O banco de dados é MySQL, que é considerado uma escolha relativamente popular. É excelente em termos de desempenho e volume. É claro que existem algumas desvantagens, mas o banco de dados não é o foco de nossa discussão aqui, desde que possa ser usado temporariamente. Crie um novo banco de dados através do navicat:

Selecione a tabela - "Clique com o botão direito para executar sql, o arquivo sql foi colocado no disco de rede Baidu

Selecione utf8 para a versão inferior e utf8mb4 para a versão superior

versão mysql5.6

DEFAULT: conjunto de caracteres do banco de dados, defina a codificação padrão do banco de dados para utf8

COLLATE: regras de agrupamento de banco de dados, a configuração padrão é utf8_general_ci

versão mysql8

DEFAULT: conjunto de caracteres do banco de dados, defina a codificação padrão do banco de dados como utf8mb4

COLLATE: Regras de agrupamento de banco de dados, a configuração padrão é utf8mb4_0900_ai_ci

3. Diretório de tabela

A tabela gerada após a execução do sql é a seguinte

 

4. IDÉIA instalar lombok

5. Construa o projeto

IDEA usa Spring Initializr para criar um projeto SpringBoot. O projeto back-end adota a forma de agregação maven, e o projeto pai faz o gerenciamento de dependências do pom. O trabalho principal é o seguinte:

1) Crie um novo projeto SpringBoot, como nosso projeto pai, que é usado apenas para gerenciamento de dependências pom de todos os nossos projetos, para que a maioria dos arquivos e pastas possam ser excluídos

2) Modifique o arquivo pom.xml, exclua a tag de dependências e a tag de construção e seu conteúdo e adicione o pom na tag de embalagem

3) Crie um projeto de módulo e use Maven para criar um subprojeto de módulo de início rápido yeb-server responsável por toda a nossa lógica de negócios

4) Modifique o projeto de módulo recém-criado yeb-server, exclua a classe App gerada e a classe AppTest e adicione um nome de pacote de servidor

5) Insira as coordenadas do projeto pai no pom.xml do subprojeto yeb-server e associe o projeto pai (projeto principal)

6) Exclua a tag build bulid e exclua as dependências (porque copiamos diretamente as dependências necessárias)

7) Preencha o diretório do projeto do subprojeto, como recursos, diretórios de cada camada, etc., e adicione o arquivo de configuração application.yml. Observe que o conteúdo do arquivo de configuração de cópia está sujeito a problemas

8) Adicione a classe de inicialização YebApplication e adicione anotações de varredura do mapeador

9) Coloque o arquivo de configuração application.yml no diretório de configuração

1. Crie o arquivo pom do projeto pai -yeb-back

Este projeto adota o projeto agregado maven e haverá um projeto pai - sim, de volta. Existem subprojetos no projeto pai: lógica de negócios completa do cloud E office - yeb-server, projeto de caixa de correio, projeto de engenharia reversa - yeb-generator.

O projeto pai é usado apenas para gerenciamento de dependências de todo o projeto pom. Exceto pom.xml, nenhum outro arquivo é necessário e excluído.

Modifique o arquivo pom.xml, exclua a tag de dependências e a tag de construção e seu conteúdo e adicione o pom na tag de embalagem 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <modules>
        <module>yeb-server</module>
        <module>yeb-generator</module>
        <module>yeb-generator</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>yeb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>yeb</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
</project>

2. Modifique o arquivo pom do subprojeto -yeb-server

Crie um projeto de módulo e use o Maven para criar um subprojeto de módulo de início rápido yeb-server responsável por toda a nossa lógica de negócios. Modifique o projeto de módulo recém-criado yeb-server, exclua a classe App e a classe AppTest geradas e, em seguida, adicione um nome de pacote de servidor. Introduza as coordenadas do projeto pai no pom.xml do subprojeto yeb-server e associe o projeto pai (projeto principal). Exclua a tag build bulid e exclua as dependências (porque copiamos diretamente as dependências necessárias)

 No arquivo xml, adicione uma dependência no projeto pai. E adicione as dependências utilizadas no projeto, o código geral:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.example</groupId>
    <artifactId>yeb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>yeb-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!--web依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>
    <!-- mybatis-plus -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.4.1</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <!-- swagger2 依赖 -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.7.0</version>
    </dependency>
    <!-- Swagger第三方ui依赖 -->
    <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>swagger-bootstrap-ui</artifactId>
      <version>1.9.6</version>
    </dependency>
    <!-- security 权限控制依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <!-- JWT 依赖 -->
    <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.0</version>
    </dependency>
    <!-- google kaptcha 验证码 -->
    <dependency>
      <groupId>com.github.axet</groupId>
      <artifactId>kaptcha</artifactId>
      <version>0.0.9</version>
    </dependency>
    <!-- StringUtils.isBlank 用来做判断,是不是空,是不是有空格等等 -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.11</version>
    </dependency>
    <!-- redis -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- commons-pool2 对象池依赖 -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>
    <!-- easy poi 依赖,导入导出数据 -->
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.2.0</version>
    </dependency>
    <!-- rabbitmq 消息队列 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <!-- websocket 实时聊天 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>

  </dependencies>

</project>

3. Adicione o arquivo de configuração application.properties


server.port=8081
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yeb?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root


spring.datasource.hikari.pool-name=DateHikariCP

spring.datasource.hikari.minimum-idle=5

spring.datasource.hikari.idle-timeout=180000

spring.datasource.hikari.maximum-pool-size=10

spring.datasource.hikari.auto-commit=true

spring.datasource.hikari.max-lifetime=1800000

spring.datasource.hikari.connection-timeout=30000

spring.datasource.hikari.connection-test-query=SELECT 1

# redis
#redis��ַ ������ϵ�
#spring.redis.host=127.0.0.1
spring.redis.host=192.168.110.130
spring.redis.port=6379

spring.redis.database=1
spring.redis.timeout=10000s

#spring.redis.password=root

spring.redis.lettuce.pool.max-active= 1024

spring.redis.lettuce.pool.max-wait= 10000ms

spring.redis.lettuce.pool.max-idle=200

spring.redis.lettuce.pool.min-idle=5

#Mybatis-plus����

mybatis-plus.mapper-locations=classpath*:/mapper/*Mapper.xml

mybatis-plus.type-aliases-package=com.example.server.pojo

#mybatis-plus.configuration.map-underscore-to-camel-case=false

## Mybatis SQL
logging.level.com.example.server.mapper=debug

jwt.tokenHeader=Authorization
jwt.secret=yeb-secret
jwt.expiration=604800
jwt.tokenHead=Bearer

# \u6D88\u606F\u961F\u5217
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.host=172.16.100.4
spring.rabbitmq.port=5672

spring.rabbitmq.publisher-confirm-type=correlated

spring.rabbitmq.publisher-returns=true

 4. Adicione a classe de inicialização YebApplication

package com.example.server;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.server.mapper")
public class YebApplication {
    public static void main(String[] args){
        SpringApplication.run(YebApplication.class,args);
    }
}

5. Autogerador de engenharia reversa

1) O que é AutoGenerator

AutoGenerator é o gerador de código do MyBatis-Plus. Através do AutoGenerator, você pode gerar rapidamente o código do Pojo, Mapper, Mapper XML, Service, Controller e outros módulos.

2) O que o AutoGenerator pode fazer?

Muita duplicação de trabalho pode ser evitada. Por exemplo: 1. Antes de desenvolver a função, a classe e o atributo Pojo correspondente (private int age;) serão criados de acordo com a tabela e o campo. O nome da classe pojo deve corresponder ao nome da tabela e os atributos devem corresponder aos campos da tabela. Para uma única tabela, é uma ferramenta quase completa, o que melhora muito a eficiência do desenvolvimento. Preste mais atenção à realização da lógica de negócios.

3) Como usá-lo?

Em nosso projeto, use o AutoGenerator do MyBatis para gerar automaticamente mapeador, serviço e controlador. Usando o gerador de código de engenharia reversa AutoGenerator que vem com MyBatisPlus pode gerar rapidamente códigos para vários módulos, como Entity, Mapper, Mapper XML, Service e Controller, o que melhora muito a eficiência do desenvolvimento.

4) A estrutura de diretórios do projeto .yeb-generator

  1. Use o início rápido do maven para criar um novo subprojeto de gerador de código de engenharia reversa yeb-generator , que é usado especialmente para a geração de código de cada módulo. Copie o código da camada mapper|service|controller gerado automaticamente para o local correspondente em yeb-server.
  2. Exclua o conteúdo não utilizado no subprojeto pom.xml do yeb-generator recém-criado, especifique as coordenadas do projeto pai, copie depende dele e crie um novo gerador de nome de pacote.

5).Arquivo de classe CodeGenerator

Execute o método principal na classe que escrevemos e insira nossa tabela abaixo. Se a tabela abaixo (ou seja, a tabela correspondente no banco de dados) gerará automaticamente o arquivo mapeador correspondente.

Execute o arquivo acima e insira o nome da tabela na caixa de controle:

 Insira o nome da tabela, separado por várias vírgulas em inglês:
 t_admin, t_admin_role, t_appraise, t_department, t_employee, t_employee_ec, t_employee_remove, t_employee_train, t_joblevel, t_mail_log, t_menu, t_menu_role, t_nation, t_oplog, t_politics_status, t_pos ition, t_ro le, t_salário, t_salário_ajuste , t_sys_msg ,t_sys_msg_content

código:

package com.example.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;

import java.util.Scanner;

/**
 * 执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
 *
 */

public class CodeGenerator {
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if(scanner.hasNext()){
            String ipt = scanner.next();
            if(StringUtils.isNotEmpty(ipt)){
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的"+tip+"!");

    }
    public static void main(String[] args) {

        AutoGenerator autoGenerator = new AutoGenerator();
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=UTF-8");
        autoGenerator.setDataSource(dataSourceConfig);
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOpen(true); // 代码生成后打开目录
        globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
        globalConfig.setAuthor("Zeng");
//        globalConfig.setIdType(IdType.ASSIGN_ID);// id 主键策略
//        globalConfig.setDateType(DateType.ONLY_DATE); // 定义生成的实体类中日期类型
        globalConfig.setSwagger2(true);// 开启Swaggers模式
        globalConfig.setServiceName("%sService");
        autoGenerator.setGlobalConfig(globalConfig);
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example");
        packageConfig.setEntity("pojo");
        packageConfig.setMapper("mapper");
        packageConfig.setController("controller");
        packageConfig.setService("service");
        packageConfig.setServiceImpl("service.impl");
        autoGenerator.setPackageInfo(packageConfig);
        StrategyConfig strategyConfig = new StrategyConfig();

//        strategyConfig.setInclude("t_admin"); // 生成单表写法
        // strategyConfig.setInclude("user","product"); // 生成多张表写法。生成所有表,不用配置
        strategyConfig.setTablePrefix("t"+"_"); // 去表前缀 t,根据实际情况填写

        strategyConfig.setEntityLombokModel(true);
        //数据库表映射到实体的命名策略
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setInclude(scanner("表名,多个英文逗号分割").split(","));
//        List<TableFill> list = new ArrayList<>();
//        TableFill tableFill1 = new TableFill("create_time", FieldFill.INSERT);
//        TableFill tableFill2 = new TableFill("update_time",FieldFill.INSERT_UPDATE);
//        list.add(tableFill1);
//        list.add(tableFill2);

//        strategyConfig.setTableFillList(list);
        autoGenerator.setStrategy(strategyConfig);

        autoGenerator.execute();
    }
}

6. arquivo pom do projeto yeb-generator

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>yeb</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>yeb-generator</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- mybatis-plus 代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>

        <!-- mybatis-plus 代码生成器默认模板 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>

        <!-- mybatis-plus 代码生成器模板引擎 -->
        <!--        <dependency>-->
        <!--            <groupId>org.freemarker</groupId>-->
        <!--            <artifactId>freemarker</artifactId>-->
        <!--            <version>2.3.30</version>-->
        <!--        </dependency>-->
    </dependencies>

</project>

7. Copie o mapper\service\controller gerado para o diretório yeb-server

1) No subprojeto yeb-generator, após gerar as classes de cada módulo, copie-as para o subprojeto yeb-server

2) Após copiar para o subprojeto yeb-server, exclua as classes de cada módulo gerado no subprojeto yeb-generator, pois elas reportarão em vermelho

3) Adicione as dependências necessárias para resolver o problema de reportar vermelho, como adicionar dependências swagger2

4) Arquivo de engenharia reversa CodeGenerator, você precisa configurar o pacote que deseja gerar a classe de módulo correspondente neste arquivo, e há comentários específicos nele

diretório do servidor yeb

 

O diretório da camada yeb-server/controller é mostrado na figura abaixo, cada arquivo é gerado pelo CodeGenerator de acordo com o nome da tabela

A construção do projeto está concluída e o combate real do projeto começará

Acho que você gosta

Origin blog.csdn.net/qq_36384657/article/details/124676242
Recomendado
Clasificación