Springboot项目小结

70 阅读4分钟

Springboot项目小结

  1. 使用idea的spring Initializr快速生成Springboot 项目的时候 如果服务器地址使用默认的start.spring.io的话可能会造成低版本jdk(1.8)和高版本Java(17)的情况 可能会造成新建不了Springboot项目或者新建成功项目报错的状况,这个时候可以将服务器地址改成start.spring.com 使用阿里云的映射就可以使用低版本JDK和低版本Java新建项目了
  2. resources目录下配置文件有三种写法分别是 application.propertiesapplication.ymlapplication.yaml 不同属性在三种 配置文件里都能生效,相同属性生效优先级 properties>yml>yaml 文件里可以改变Springboot工程的启动端口以及设置数据库等配置
  3. 环境区分(多种方法)
    1. 可以在resource文件夹下定义application-xxx.properties的多个文件,例如 application-dev.properties、application-pro.properties和application-test.properties分别代表开发环境、生产环境和测试环境。 然后在主application.properties文件里设置spring.profiles.active=dev 代表激活开发环境、spring.profiles.active=pro激活生产环境、Spring.profiles.active=test激活测试环境
    2. 在yml里使用---进行分割文档表示 使用---隔开的代表不同的环境,spring profiles属性来命名当前的环境 最后使用 spring profiles active 确定要激活的环境名称
    3. 通过使用 虚拟机参数 在vmOptions里指定 -Dspring.profiles.active=dev的方式来指定当前运行环境为开发环境
    4. 通过使用 命令行参数 配置 java -jar xxx.jar --spring.profiles.active=dev来指定当前运行环境为开发环境
  4. 访问路径修改: server.servlet.context-path = /xxx 修改项目访问路径为/xxx 默认的项目访问路径是/
  5. 使用maven打包项目后使用 java -jar启动项目失败的原因有很多种 比如提示 jar中没有主清单属性的解决方法是:在pom.xml文件里查找skip标签 将值改为false 或者注释
  6. 在mybatis 项目里需要在配置文件application.profiles(yml)里额外配置mapper-location:classpath:mapper/*Mapper.xml 关系映射。 以及对应的类 type-aliases-package : com.xxx.domain
  7. 定义一个接口步骤(mybatisPlus)
    1. 在entity包下新建实体类xxx.java 使用lombok.Data包下的@Data注解可以不用重写get/set方法 实体类的字段需要与数据库一致 (可以在application里配置驼峰命名法 map-underscore-to-camel-case: true ) 数据库中使用 user_id 对应实体类中的变量为userId
    2. 在mapper包下定义接口 xxxMapper. 使用@Mapper注解 并继承BaseMapper<对应的实体类>
    3. 在service包下定义 接口 xxxService 继承IService<对应实体类名>
    4. 在service包的impl包下定义类 xxxServiceImpl 使用@Service注解 继承ServiceImpl<xxxMapper, 对应实体类> 并且实现 xxxService
    5. 在controller包下定义xxxController类 使用注解@RestController @RequestMapping("要监听的url例如/dish") 在类里面定义变量 @Autowired private xxxService service; 并且添加注解@Autowired 然后添加方法 每个方法对应一个接口 增加@GetMapping("/list")接口 表示监听/dish/list 的get请求
  8. @RequestBody接收JSON数据 添加注解@GetMapping("/{id}")并且形参添加注解@PathVariable 代表 将传递的id设为参数 例如 @GetMapping("/id/{id}") func(@pathVariable Long id ) 代表了接收/id/12345并且会将值赋给id
  9. 当一个实体类xxx的定义的变量不足以满足业务 可以定义个xxxDto 这个Dto继承自xxx 并且有其他拓展
  10. 未登录拦截机制、跳过拦截某些请求 filter包下的 LoginCheckFilter
  11. mybatisPlusConfig.java 配置文件
  12. SwaggerConfig.java Swagger 配置教程
    1. controller 使用@ApiIgnore 注解 代表忽略接口接收参数swagger渲染的参数 使用@Api(tags = {"地址簿管理接口"}) 代表接口的名称 @ApiOperation(value = "获取所有地址信息", notes = "获取所有地址信息") 接口方法名称
    2. 实体类中@ApiModel(description = "地址") 代表Swagger文档的对应实体类的类别 可以添加 require=true 和hidden=true 对数据进行必填或者隐藏处理
  13. WebMvcConfig 配置文件 设置静态资源映射 处理resources文件夹下的映射关系
  14. Common包下的
    1. R类 通用返回结果

         package com.yangzx.ruij.common; 
         import lombok.Data;  
          import java.util.HashMap;  
          import java.util.Map;  
      
          /**  
          *  
          * 通用返回结果  
          * @param <T>  
          */  
          @Data  
          public class R<T> {  
      
          private Integer code; //编码:1成功,0和其它数字为失败  
      
          private String msg; //错误信息  
      
          private T data; //数据  
      
          private Map map = new HashMap(); //动态数据  
      
          public static <T> R<T> success(T object) {  
          R<T> r = new R<T>();  
          r.data = object;  
          r.code = 1;  
          return r;  
          }  
      
          public static <T> R<T> error(String msg) {  
          R r = new R();  
          r.msg = msg;  
          r.code = 0;  
          return r;  
          }  
      
          public R<T> add(String key, Object value) {  
          this.map.put(key, value);  
          return this;  
          }  
          }
      
    2. BaseContext类 封装的使用线程存储 一般可以存储用户名 用户id

    3. CustomException类 自定义业务异常

    4. GlobalExceptionHandle类 全局捕获异常

    5. JacksonObjectMapper 对象映射器基于jackson将Java对象转为json,或者将json转为Java对象 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]从Java对象生成JSON的过程称为 [序列化Java对象到JSON]

    6. MyMetaObjectHandler类 公共数据处理 比如更新时间 更新用户 创建时间 创建用户

                 package com.yangzx.ruij.common;  
      
                 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;  
                 import lombok.extern.slf4j.Slf4j;  
                 import org.apache.ibatis.reflection.MetaObject;  
                 import org.springframework.stereotype.Component;  
      
                 import java.time.LocalDateTime;  
      
                 /**  
                 * 信息描述:元数据对象处理器  
                 *  
                 * @author: Yangzx  
                 * @createDate: 2024/3/16 15:19  
                 * @className: MyMetaObjectHandler  
                 */  
                 @Component  
                 @Slf4j  
                 public class MyMetaObjectHandler implements MetaObjectHandler {  
      
                 @Override  
                 public void insertFill(MetaObject metaObject) {  
                 log.info("公共字段自动填充(insert):" + metaObject.toString());  
                 metaObject.setValue("createTime", LocalDateTime.now());  
                 metaObject.setValue("updateTime", LocalDateTime.now());  
                 metaObject.setValue("createUser", BaseContext.getCurrentId());  
                 metaObject.setValue("updateUser", BaseContext.getCurrentId());  
                 }  
      
                 @Override  
                 public void updateFill(MetaObject metaObject) {  
                 log.info("公共字段自动填充(update):" + metaObject.toString());  
                 metaObject.setValue("updateTime", LocalDateTime.now());  
                 metaObject.setValue("updateUser", BaseContext.getCurrentId());  
                 }  
           }