一、前言
此框架主要针对SpringBoot项目各类功能做出封装,整合各类插件,提供简便快速用法;
二、功能描述
已完成功能:
- 整合Mybatis Plus单表查询;
- 整合Swagger接口文档;
- 整合Druid配置多数据源;
- 封装全局异常捕获;
- 封装同字段对象间转换方法;
待整合功能
Nacos
easy-es
RabbitMQ
Redis
Debezium
Cancel
请求拦截器
内部过滤器
常用工具类
gateway
auth2
文件上传下载接口封装
hdfs/fastdfs文件存储
本地文件夹监控
文件读取
压缩包读取
数据库配置加密
切面
配置文件读取
日期自动填充
自定义注解转换 0-false
三、具体实现
-
整合Mybatis Plus单表查询
包含Service、ServiceImpl与mapper/** * @author Ryan * @date 2022-07-27 */ @Repository public interface StudentMapper extends BaseMapper<StudentDO> { }
/** * @author Ryan * @date 2022-07-27 */ public interface StudentService extends IService<StudentDO> { /** * 查询单条学生信息 * * @param id * @return */ public StudentVO one(String id); }
/** * @author Ryan * @date 2022/7/27 11:32 * @description 学生实现类 */ @Service public class StudentServiceImpl extends ServiceImpl<StudentMapper, StudentDO> implements StudentService { @Override public StudentVO one(String id) { StudentDO student = this.getById(id); ObjUtils.checkNull(student,"当前id:"+id+"无法确认学生信息"); return ObjUtils.convert(student,StudentVO.class); } }
-
整合Swagger接口文档;
引入 knife4j swagger增强插件(详见 pom.xml)
配置类如下:/** * @author Ryan * @date 2022/7/27 20:56 * @description swagger配置 */ @Configuration @EnableSwagger2 @EnableKnife4j public class Knife4jConfiguration { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .enable(true) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.ryan.fw.controller")) .paths(PathSelectors.any()) .build() .securitySchemes(securitySchemes()); } private List<SecurityScheme> securitySchemes() { return Arrays.asList(new ApiKey("Authorization", "Authorization", "header")); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Framework") .description("Framework") .contact(new Contact("Ryan", "url", "email")) .version("1.0.0") .build(); } }
Controller中调用如下:
@Api(tags = "【学生操作】") @RestController public class StudentController { @Resource private StudentService studentService; @ApiOperation("根据id查询学生信息") @GetMapping("/getStudentById") public Result getStudentById(@ApiParam("id") @RequestParam("id") String id) { return Result.success("查询成功", studentService.one(id)); } }
效果图如下:
-
整合Druid配置多数据源;
引入 dynamic-datasource-spring-boot-starter (详见 pom.xml)
application.yml配置如下(当前仅为单数据源):server: port: 8888 spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: url: jdbc:mysql://127.0.0.1:3306/framework username: root password: 123456
-
封装全局异常捕获;
全局捕获 RuntimeException 返回前端结果;/** * @author Ryan * @date 2022/7/27 17:30 * @description 全局异常处理 */ @Slf4j @RestControllerAdvice public class GlobalExceptionHandle { /** * 捕获RuntimeException并返回前端结果 * * @param e * @return */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(value = RuntimeException.class) public Result handle(RuntimeException e) { log.error("【运行异常】" + e.getMessage()); return Result.err(e.getMessage()); } }
效果图如下:
-
封装同字段对象间转换方法
本功能采用 Dozer 插件进行封装,同时运用单例模式进行对象获取操作,代码如下;/** * 对象间转换 * * @param obj * @param clazz * @param <T> * @return */ public static <T> T convert(Object obj, Class<T> clazz) { return DozerBean.getInstance().map(obj, clazz); }
/** * @author Ryan * @date 2022/7/27 18:10 * @description 转换工具实例 */ @NoArgsConstructor public class DozerBean { public static DozerBeanMapper getInstance(){ return DozerBeanHolder.DOZER_BEAN_MAPPER; } private static class DozerBeanHolder{ private static final DozerBeanMapper DOZER_BEAN_MAPPER = new DozerBeanMapper(); } }
四、开源地址
GitHub: https://github.com/fsyxjwxw/SpringBoot-Framework
如有其他想法或想要整合的插件请与本人联系;