# demo **Repository Path**: zoxm/demo ## Basic Information - **Project Name**: demo - **Description**: springboot模板项目 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-12 - **Last Updated**: 2026-05-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DEMO项目 >MySQL+SpringBoot+MyBatis+FastJSON+Redis+Minio+JWT+Springdoc ### 总览 ```TXT ├─.mvn │ └─wrapper 如果没有配置maven,也可以使用当前配置的wrapper,当前配置的maven已经配置阿里云仓库,增强依赖下载速度。 ├─sql 存放数据库脚本 │ ├─src ├─main │ ├─java │ │ └─com │ │ └─example │ │ └─common │ │ ├─core │ │ │ ├─annotation 统一存放自定义注解,例如:操作日志注解 │ │ │ ├─aspect 统一存放切面类,例如:操作日志切面 │ │ │ ├─config 统一存放配置类,例如:数据源配置类、拦截器配置类、缓存配置类、Mybatis配置类、Minio配置类... │ │ │ ├─contsant 统一存放常量类,例如:数据库常量类、缓存常量类、JWT常量类... │ │ │ ├─exception 统一存放异常类 │ │ │ ├─security 统一存放安全类,例如:JWT工具类 │ │ │ ├─utils 统一存放工具类,例如:Redis工具类、Bean工具类、文件工具类...这里已经删除原来框架很多的工具类,这里推荐尽量使用apache的工具类,这里不再提供。 │ │ │ └─web 统一存放框架web类基类,例如:页面基类, │ │ └─system │ │ ├─controller 系统模块的控制器 │ │ ├─dto 系统模块的传输对象 │ │ ├─entity 系统模块的实体类 │ │ ├─mapper 系统模块的Mapper。注意:这里不要存放.**.xml文件,所有的xml文件统一放到resource文件夹中 │ │ ├─param 系统模块的查询参数类 │ │ ├─req 系统模块的请求参数类 │ │ └─service 系统模块的Service层 │ │ └─impl │ └─resources │ └─common 这里存放公共的Mapper.xml文件,注意区分不同的模块 │ └─system │ └─mapper │ └─xml └─test └─java └─com └─example 这里是代码生成器。 └─generator ├─engine └─templates ``` 相比于原来的框架,这里进行了如下优化: ### 优化细项 #### 功能删减 * 1.删除邮件功能 * 2.删除文件上传功能,改为使用Minio进行文件上传 * 3.删除字典功能 * 4.删除hutool相关依赖 * 5.删除mysql-connector-java依赖,升级为mysql-connector-j依赖 * 6.删除JSONString类不稳定类,推荐使用fastjson2 * 7.删除原有的大部分工具类,这些工具类代码老旧,警告太多。推荐使用apache的工具common-lang3包进行代替。 #### 代码优化 * 1.将原来的swagger2.0依赖改为Springdoc,注意文档生成注解不同。推荐尽量手动或者使用IDEA的apifox插件生成,目前还不清楚启动耗时长是否由于API文档扫描导致的。 * 2.将原来的MybatisPlus的xml文件迁移到resource文件夹下面,注意新生成的代码依旧还是原来的位置,需要手动迁移 * 3.优化日志生成配置文件 * 4.优化操作日志切面,将接口请求时间整合到操作日志中 * 5.优化Redis配置 * 6.新增Minio文件上传 * 7.优化全局异常处理 * 8.新增雪花算法SnowflakeIdUtil的ID生成器,注意多节点部署需要配置snowflake.properties文件 * 10.增加validation校验 ### 数据库表通用设计原则 【强制】bigint unsigned id 显式主键id,勿用复合主键,命名统一为:id 【强制】bigint unsigned data_id 分片键id,存在数据库分片可以使用 【强制】varchar(11) created_by 操作人 【强制】int(1) unsigned deleted 逻辑删除标记.默认值0,删除值1 【强制】timestamp create_time 默认值 CURRENT_TIMESTAMP 额外值 DEFAULT_GENERATED 【强制】timestamp update_time 默认值 CURRENT_TIMESTAMP 额外值 DEFAULT_GENERATED on update CURRENT_TIMESTAMP 【强制】关于状态字段根据业务含义命名为: state、status 【强制】主键索引名为 pk_字段名 【强制】唯一索引名为 uk_字段名 【强制】普通索引名则为 idx_字段名。 【强制】禁止在在低基数上创建索引,如性别,是否启用 【强制】避免过度索引:索引过多增加更新语句的消耗 【强制】为 WHERE、JOIN、ORDER BY、GROUP BY 涉及的高频查询字段建立索引。 【强制】理解最左前缀匹配原则复合索引 (a, b, c) 可以被 WHERE a=?, WHERE a=? AND b=?, WHERE a=? AND b=? AND c=? 利用,但不能被 WHERE b=? 或 WHERE c=? 利用。 【强制】不得使用外键与级联,一切外键概念必须在应用层解决 【强制】不用存储过程 【强制】数据库名、表名、字段名统一使用小写字母, _ 分割 【强制】表和字段必须加注释! 【强制】一律都是软删除 【强制】单表不宜过大:千万以下最好 【强制】对于大表需要进行归档处理,合理利用软删除 【强制】表名应具有业务含义且简洁: 【强制】生产环境 DDL 操作(尤其是 ALTER TABLE)需评估风险,选择低峰期执行,并有回滚预案。执行 ALTER TABLE会进行锁表 【强制】尽可能使用 NOT NULL 【强制】时间字段优先使用 TIMESTAMP 或 DATETIME, TIMESTAMP 范围小(1970-2038),但存储空间小(4字节),且自动时区转换。 DATETIME 范围大(1000-9999),存储空间大(8字节),不涉及时区。 避免使用 INT 存储时间戳(虽然节省空间,但可读性差,易出错)。 【强制】当字段为外键时,字段名为:关联表_id, 注释需要在字段注释基础上,换行加上 #关联表表名来说明关联的哪张表。 【建议】遵循第三范式 (3NF) 作为起点: 减少数据冗余,保证数据一致性。但在性能要求极高的场景下,可以进行有目的的反范式化(如添加冗余字段、宽表)以换取查询性能。 【建议】监控慢查询日志: 【禁止】禁止使用 ENUM 和 SET 类型 ### 常用命令 ```BASH # 打包 mvn clean package -DskipTests # 启动 mvn spring-boot:run ```