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