Files
V-LiuShuang 88c597205b add
2026-09-10 14:01:15 +08:00

3.8 KiB

代码编写规范

类目 使用原则 描述
异步任务工单 适当应用 阅读文档worksheet.md,拿捏不准请询问用户是否要使用。
JDK11~21的新特性 积极使用 局部变量类型推断、Switch表达式、模式匹配、文本块、记录类、虚拟线程。
虚拟线程应当用于IO密集型的任务,而不是CPU密集型任务。
设计模式 非常看重 为了降低代码耦合度,提高可维护性。
请积极的采用工厂、模板、策略、发布订阅等常用的设计模式。
一个Java源文件的代码行数不得超过300行,超出则拆成多个文件。
一个方法体内的行数不得超过20行,超出则拆成多个方法。
对于发布订阅模式,请根据以下情况判断:
跨服务通信、集群实例广播消息,优先使用RocketMQ消息队列。
进程内通信则使用ApplicationEventPublisher@EventListener即可。
Lombok注解 积极使用 无需担心编译速度被拖慢。
Null值处理 适当应用 优先考虑Optional.ofNullable(obj)而不是if (obj == null)
Stream 积极使用 优先使用Stream而不是循环,若map代码块超过5行就单独写一个方法。
如果需要中间对象则优先使用记录类,记录类和DTO存放在一个目录。
工具类 积极使用 优先采纳hutool,除非hutool没有提供才新建一个工具类。
构建对象 非常看重 构建JavaBean对象,优先使用构造函数而不是单独写工具类或方法。
只有3个以内的属性,应提供一个全部参数的构造函数。
List 适当应用 在非多线程场景,默认用ArrayList
有需要按照插入顺序遍历元素的场景,使用LinkedList
需考虑线程安全用CopyOnWriteArrayList
Set 适当应用 在非多线程场景,默认用HashSet
按照插入顺序遍历元素的场景用LinkedHashSet
有排序的需求则使用TreeSet
需考虑线程安全用:
cn.hutool.core.collection.ConcurrentHashSet
ConcurrentSkipListSet
CopyOnWriteArraySet
Map 适当应用 在非线程场景,默认用HashMap
对排序要求考虑用LinkedHashMap或TreeMap。
如果存在并发场景,用ConcurrentHashMapConcurrentSkipListMap
Queue 适当应用 要控制内存,用ArrayBlockingQueue
经典生产者消费者,用LinkedBlockingQueue
要窃取任务,用LinkedBlockingDeque
追求极致吞吐且不怕队列暴涨,用ConcurrentLinkedQueue
必须双端且高吞吐,用ConcurrentLinkedDeque
Lock 适当应用 分布式锁使用Redisson相关API
单机使用ReentrantLockStampedLock

实体类与MySQL字段类型映射规则

实体类字段类型 MySQL字段类型
String VARCHAT(255)
Long BIGINT
Integer INT
LocalDate DATE
LocalDateTime DATETIME
BigDecimal DECIMAL(14, 2)
  • 数据库表结构字段名称、实体类字段名称,采用驼峰与下划线映射的方式。
  • @TableField注解中typeHandler等于JacksonTypeHandler.class时,表结构字段默认JSON类型。
  • 实体类字段包含@NotNull注解,需要结合@Schema注解中的defaultValue属性判断是否需要设置默认值。
  • 主键列是否采用MySQL自增序列,取决于实体类被@TableId注解修饰的字段,要看其type属性,如果是IdType.AUTO则使用自增,否则不需要。
  • 如果@Schema注解指定了maxLength属性,按如下原则设置字段类型:
    • 数值小于或等于2000,使用VARCHAR
    • 数值大于2000且小于10000,使用TEXT
    • 数值大于10000,使用LONGTEXT