东莞seo网站管理,网络规划设计师培训视频教程,哪些人需要建网站,苏州那家公司做网站比较好前要 项目设计–宿舍管理系统 文章目录 项目建立导入依赖配置文件配置目录结构config配置mybatis-plusswagger 生成实体、mapper和servicebaseEntity统一响应实例响应码接口响应码接口实现统一响应result统一分页响应 项目建立 太长了#xff0c;修改一下
导入依赖
暂时先加…前要 项目设计–宿舍管理系统 文章目录 项目建立导入依赖配置文件配置目录结构config配置mybatis-plusswagger 生成实体、mapper和servicebaseEntity统一响应实例响应码接口响应码接口实现统一响应result统一分页响应 项目建立 太长了修改一下
导入依赖
暂时先加上下面依赖还有的话以后在看 java.version17/java.versionmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targethutool.version5.8.15/hutool.versiondruid.version1.2.16/druid.versionmybatis-plus.version3.5.3.1/mybatis-plus.versionxxl-job.version2.4.0/xxl-job.versionjava-jwt.version4.2.1/java-jwt.versioneasyexcel.version3.2.1/easyexcel.versioneasy-captcha.version1.6.2/easy-captcha.versionknife4j.version4.0.0/knife4j.versiondependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency!--mybatis-plus依赖--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion${mybatis-plus.version}/version/dependency!--jwt令牌--dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion${java-jwt.version}/version/dependency!--连接池--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion${druid.version}/version/dependency!--hutool工具包--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion${hutool.version}/version/dependency!--xxl-job定时任务--dependencygroupIdcom.xuxueli/groupIdartifactIdxxl-job/artifactIdversion${xxl-job.version}/version/dependency!--excel操作--dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion${easyexcel.version}/version/dependency!-- 验证码 --dependencygroupIdcom.github.whvcse/groupIdartifactIdeasy-captcha/artifactIdversion${easy-captcha.version}/version/dependency!--swagger--dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-openapi3-jakarta-spring-boot-starter/artifactIdversion${knife4j.version}/version/dependency
配置文件
application.yml
spring:application:name: xiaoyuprofiles:active: devapplication-dev.yml
server:port: 8080spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: username: password: data:redis:database: 6host: port: password: timeout: 10slettuce:pool:# 连接池最大连接数 默认8 负数表示没有限制max-active: 8# 连接池最大阻塞等待时间使用负值表示没有限制 默认-1max-wait: -1# 连接池中的最大空闲连接 默认8max-idle: 8# 连接池中的最小空闲连接 默认0min-idle: 0
mybatis-plus:global-config:db-config:# 主键ID类型id-type: none# 逻辑删除字段名称logic-delete-field: deleted# 逻辑删除-删除值logic-delete-value: 1# 逻辑删除-未删除值logic-not-delete-value: 0configuration:# 驼峰下划线转换map-underscore-to-camel-case: true# 这个配置会将执行的sql打印出来在开发或测试的时候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 认证配置
auth:token:secret_key: # token 有效期(单位:秒)ttl: # springdoc配置 https://springdoc.org/properties.html
springdoc:swagger-ui:enabled: trueoperationsSorter: alphatags-sorter: alphaapi-docs:enabled: true# 验证码配置
easy-captcha:# 验证码类型: arithmetic-算术type: arithmetic# 验证码有效时间(单位秒)ttl: 120# xxl-job 定时任务配置
xxl:job:admin:# 多个地址使用,分割addresses:accessToken:executor:appname: address:ip:port: logpath:logretentiondays: # 系统配置
system:config:# 数据权限开关data-permission-enabled: # 定时任务 xxl-job 开关xxl-job-enabled: # WebSocket 开关websocket-enabled: 配置目录结构 新加一个handler包用于像mybatis自动填充的处理配置
config配置
mybatis-plus
具体配置mybaits-plus配置
注解
// 配置文件
Configuration
// 开启事务管理
EnableTransactionManagement
// mapper扫描
MapperScan(com.yu.mapper)插件bean 这里先只配置分页插件
Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();//分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}自动填充bean Beanpublic GlobalConfig globalConfig() {GlobalConfig globalConfig new GlobalConfig();globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());return globalConfig;}这里有2种写法注释掉的是低版本的。高版本从3.3.0开始可以使用。不过3.3.0不要使用。有bug。
Component
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 新增填充创建时间** param metaObject*/Overridepublic void insertFill(MetaObject metaObject) {
// this.strictInsertFill(metaObject, createTime, LocalDateTime::now, LocalDateTime.class);
// this.strictUpdateFill(metaObject, updateTime, LocalDateTime::now, LocalDateTime.class);this.fillStrategy(metaObject,createTime,LocalDateTime.now());this.fillStrategy(metaObject,updateTime,LocalDateTime.now());}/*** 更新填充更新时间** param metaObject*/Overridepublic void updateFill(MetaObject metaObject) {
// this.strictUpdateFill(metaObject, updateTime, LocalDateTime::now, LocalDateTime.class);this.fillStrategy(metaObject,updateTime,LocalDateTime.now());}}
swagger
Configuration
public class SwaggerConfig {/*** 接口信息*/Beanpublic OpenAPI apiInfo() {return new OpenAPI().components(new Components().addSecuritySchemes(Authorization,new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme(bearer).bearerFormat(JWT))).info(new Info().title(xiao-yu-Dormitory 接口文档).version(1.0.0).description(接口文档));}/*** 系统接口分组*/Beanpublic GroupedOpenApi systemApi() {String[] paths {/**};String[] packagesToScan {com.yu.controller};return GroupedOpenApi.builder().group(系统接口).packagesToScan(packagesToScan).pathsToMatch(paths).build();}}
生成实体、mapper和service
我直接用mybatisX进行生成 通过右键表可以 选择模块 基础包
baseEntity
在common包下新建一个类 用于规范创建和更新时间的类
Data
public class BaseEntity implements Serializable {Serialprivate static final long serialVersionUID 1L;TableField(fill FieldFill.INSERT)JsonInclude(value JsonInclude.Include.NON_NULL)JsonFormat(pattern yyyy-MM-dd HH:mm:ss)private LocalDateTime createTime;TableField(fill FieldFill.INSERT_UPDATE)JsonInclude(value JsonInclude.Include.NON_NULL)JsonFormat(pattern yyyy-MM-dd HH:mm:ss)private LocalDateTime updateTime;
}
统一响应实例
响应码接口
public interface IResultCode {String getCode();String getMsg();}
响应码接口实现
AllArgsConstructor
NoArgsConstructor
public enum ResultCode implements IResultCode, Serializable {SUCCESS(00000, ok),Overridepublic String getCode() {return code;}Overridepublic String getMsg() {return msg;}private String code;private String msg;Overridepublic String toString() {return { \code\:\ code \ , \msg\:\ msg \ };}public static ResultCode getValue(String code){for (ResultCode value : values()) {if (value.getCode().equals(code)) {return value;}}return SYSTEM_EXECUTION_ERROR; }
}统一响应result
EqualsAndHashCode(callSuper true)
public record ResultT(String code,T data,String msg
) implements Serializable{public static T ResultT success() {return success(null);}public static T ResultT success(T data) {return new Result(ResultCode.SUCCESS.getCode(),data,ResultCode.SUCCESS.getMsg());}public static T ResultT failed() {return result(ResultCode.SYSTEM_EXECUTION_ERROR.getCode(), ResultCode.SYSTEM_EXECUTION_ERROR.getMsg(), null);}public static T ResultT failed(String msg) {return result(ResultCode.SYSTEM_EXECUTION_ERROR.getCode(), msg, null);}public static T ResultT judge(boolean status) {if (status) {return success();} else {return failed();}}public static T ResultT failed(IResultCode resultCode) {return result(resultCode.getCode(), resultCode.getMsg(), null);}public static T ResultT failed(IResultCode resultCode, String msg) {return result(resultCode.getCode(), msg, null);}private static T ResultT result(IResultCode resultCode, T data) {return result(resultCode.getCode(), resultCode.getMsg(), data);}private static T ResultT result(String code, String msg, T data) {return new Result(code, data, msg);}public static boolean isSuccess(Result? result) {return result ! null ResultCode.SUCCESS.getCode().equals(result.code());}
}
统一分页响应
public record PageResultT(String code,DataT data,String msg
) implements Serializable {public static T PageResultT success(IPageT page) {DataT data new DataT(page.getRecords(), page.getTotal());return new PageResultT(ResultCode.SUCCESS.getCode(), data, ResultCode.SUCCESS.getMsg());}public record DataT(ListT list, long total) {}}