构建前后端分离项目常用的代码

构建前后端分离项目常用的代码

1.代码生成器

 import com.baomidou.mybatisplus.generator.FastAutoGenerator;
 import com.baomidou.mybatisplus.generator.config.OutputFile;
 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
 ​
 import java.util.Collections;
 ​
 public class CodeGenerator {
     public static void main(String[] args) {
         String url = "jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
         String username = "用户名";
         String password = "密码";
         String moduleName = "sys";  // 表的前缀
         String mapperLocation = "E:\\boot+vue\\x-admin\\src\\main\\resources\\mapper\\" + moduleName;
         String tables = "x_user,x_role,x_menu,x_user_role,x_role_menu"; // 表名
         FastAutoGenerator.create(url, username, password)
                 .globalConfig(builder -> {
                     builder.author("author") // 设置作者
 //                            .enableSwagger() // 开启 swagger 模式
 //                            .fileOverride() // 覆盖已生成文件
                             .outputDir("E:\\boot+vue\\x-admin\\src\\main\\java"); // 指定输出目录
                 })
                 .packageConfig(builder -> {
                     builder.parent("com.bo") // 设置父包名
                             .moduleName(moduleName) // 设置父包模块名
                             .pathInfo(Collections.singletonMap(OutputFile.xml, mapperLocation)); // 设置mapperXml生成路径
                 })
                 .strategyConfig(builder -> {
 ​
 //                    builder.mapperBuilder().enableMapperAnnotation().build();  //自动加mapper注解
 //                    builder.controllerBuilder().enableHyphenStyle().//开启驼峰转字符
 //                            enableRestStyle(); //生成RestController 控制器
                     builder.addInclude(tables) // 设置需要生成的表名
 ​
                             .addTablePrefix("x_"); // 设置过滤表前缀
                 })
                 .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                 .execute();
     }
 }

2.mybatisPlus分页拦截器

@Configuration
 public class MpConfig {
     @Bean
     public MybatisPlusInterceptor mybatisPlusInterceptor() {
         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
         return interceptor;
     }
 }
 ​

3.跨域

@Configuration
 public class CorsConfig {
 ​
     // 当前跨域请求最大有效时长。这里默认1天
     private static final long MAX_AGE = 24 * 60 * 60;
 ​
     @Bean
     public CorsFilter corsFilter() {
         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
         CorsConfiguration corsConfiguration = new CorsConfiguration();
         corsConfiguration.addAllowedOrigin("http://localhost:8080"); // 1 设置访问源地址
         corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
         corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
         corsConfiguration.setMaxAge(MAX_AGE);
         source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
         return new CorsFilter(source);
     }
 }

4.配置文件

 server:
   port: 端口号
 spring:
   datasource:
     username: root
     password: 数据库密码
     url: jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
 ​
 # 逻辑删除
 mybatis-plus:
   global-config:
     db-config:
       logic-delete-field: deleted   
       logic-not-delete-value: 0
       logic-delete-value: 1
   type-aliases-package: com.bo.*.entity

5.一些常用依赖

 <!-- mybatis-plus -->
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.5.2</version>
 </dependency>
 ​
 <!--Swagger整合-->
 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-boot-starter</artifactId>
     <version>3.0.0</version>
 </dependency>
 ​
 <!-- 导入与导出 -->
 <dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.7.20</version>
 </dependency>
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>4.1.2</version>
 </dependency>
 ​
 <!--jwt整合-->
 <dependency>
     <groupId>io.jsonwebtoken</groupId>
     <artifactId>jjwt</artifactId>
     <version>0.9.1</version>
 </dependency>
 ​
 <!--解决jwt报错问题-->
 <dependency>
     <groupId>javax.xml.bind</groupId>
     <artifactId>jaxb-api</artifactId>
     <version>2.3.1</version>
 </dependency>
 ​
 <!--lombok-->
 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.16</version>
     <scope>provided</scope>
 </dependency>
 ​
 <!-- web -->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <!-- mysql -->
 <dependency>
     <groupId>com.mysql</groupId>
     <artifactId>mysql-connector-j</artifactId>
 </dependency>
 ​
 <dependency>
     <groupId>com.baomidou</groupId>
     <!-- mybatis-plus代码生成器 -->
     <artifactId>mybatis-plus-generator</artifactId>
     <version>3.5.2</version>
 </dependency>
 <!-- freemarker :plus代码生成器需要用-->
 <dependency>
     <groupId>org.freemarker</groupId>
     <artifactId>freemarker</artifactId>
 </dependency>
 ​
 <!--redis-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>
 ​
 <!--fastjson-->
 <dependency>
     <groupId>com.alibaba.fastjson2</groupId>
     <artifactId>fastjson2</artifactId>
     <version>2.0.7</version>
 </dependency>

6.Swagger 文档

@Configuration
 @EnableOpenApi
 @EnableWebMvc
 public class MySwaggerConfig {
     @Bean
     public Docket api(){
         return new Docket(DocumentationType.OAS_30)
                 .apiInfo(apiInfo())
                 .select()
                 .apis(RequestHandlerSelectors.basePackage("com.bo"))
                 .paths(PathSelectors.any())
                 .build()
                 .securitySchemes(Collections.singletonList(securityScheme()))
                 .securityContexts(Collections.singletonList(securityContext()));
     }
     private SecurityScheme securityScheme(){
         return new ApiKey("X-Token","X-Token","header");
     }
     private SecurityContext securityContext(){
         return SecurityContext.builder()
                 .securityReferences(defaultAuth())
                 .forPaths(PathSelectors.regex("^(?!auth).*$"))
                 .build();
     }
     private List<SecurityReference> defaultAuth(){
         AuthorizationScope authorizationScope = new AuthorizationScope("global","accessEverything");
         AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
         authorizationScopes[0] = authorizationScope;
         return Collections.singletonList(
                 new SecurityReference("X-Token",authorizationScopes));
     }
 ​
     private ApiInfo apiInfo(){
         return new ApiInfoBuilder()
                 .title("员工管理系统接口文档")
                 .description("SpringBoot+Vue前后端分离项目实战")
                 .version("1.0")
                 .contact(new Contact("qc","http://www.qqcn.cn","qc@yun.com"))
                 .build();
     }
 }

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Abp VNext是一个开源的应用框架,它提供了一种快速构建现代化、模块化和可扩展的企业级应用程序的方式。在Abp VNext中,前后端的分离是一种常见的项目实践方式,它可以提供更好的团队协作、灵活性和可维护性。 下面是一些Abp VNext前后端分离项目实践的建议: 1. 前后端分离架构:在Abp VNext中,可以使用前后端分离的架构来开发应用程序。前端部分可以使用任何流行的前端框架,如Angular、React或Vue.js。后端部分则使用Abp VNext提供的后端框架。 2. API接口设计:在前后端分离项目中,需要定义清晰的API接口,以便前后端开发人员可以进行协作。可以使用Swagger等工具来自动生成API文档,并确保接口的一致性和易用性。 3. 跨域支持:由于前后端分离项目中前端和后端运行在不同的域名或端口上,因此需要配置跨域支持。在Abp VNext中,可以使用CorsPolicy来配置跨域访问权限。 4. 认证和授权:在前后端分离项目中,需要考虑用户认证和授权的问题。Abp VNext提供了强大的身份验证和授权功能,可以轻松地集成到前后端分离项目中。 5. 模块化开发:Abp VNext支持模块化开发,可以将功能模块拆分为独立的模块,以便不同的团队可以并行开发前后端分离项目中,可以将前端和后端的模块进行对应,实现更好的解耦和扩展性。 6. 前后端协作:在前后端分离项目中,前后端开发人员需要进行紧密的协作。可以使用版本控制工具如Git来管理代码,并使用项目管理工具如Jira来进行任务管理和进度跟踪。 以上是Abp VNext前后端分离项目实践的一些建议,希望对你有帮助!如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值