注:下面的都是用ai生成的,本人小菜鸡,只是记录学习,佬可以滑走
MyBatis-Plus
-
@TableName("landchain_common_query")- 用于指定当前实体类对应的数据库表名, 这里表示该类映射到数据库中的
landchain_common_query表,ORM 框架会根据此注解进行表与类的关联操作(如 CRUD)
- 用于指定当前实体类对应的数据库表名, 这里表示该类映射到数据库中的
-
@TableId(type = IdType.ASSIGN_ID)
@TableId 用于标记实体类中的字段作为数据库表的主键(对应数据库表的 PRIMARY KEY)。type = IdType.ASSIGN_ID 则指定了主键的生成方式为 MyBatis-Plus 自动分配 ID。
2. 生成的主键类型为 **Long 或 String 类型的雪花算法 ID**(默认是 Long 类型,如需 String 可手动指定字段类型)。
- 雪花算法(Snowflake)生成的 ID 是 **64 位的长整型数字**,包含时间戳、机器标识、序列号等信息,保证全局唯一(适合分布式系统)。
- 特点:无需依赖数据库,由应用程序本地生成,性能高,且能保证 ID 有序递增(便于索引优化)。
3. 适用场景
- 分布式系统:避免多节点部署时的 ID 冲突(无需数据库自增主键)。
- 主键类型为长整型(Long)或字符串(String)的表。
- 不需要数据库层面自增(如 `AUTO_INCREMENT` 或 `IDENTITY`)的场景。
Lombok注解
-
@Accessors(chain = true)
- 用于配置实体类的setter方法的链式调用。- 当
chain = true时,实体类的 setter 方法会返回当前对象本身(return this;),支持类似user.setName("xxx").setAge(18)的链式赋值,简化代码编写。
- 用于配置实体类的setter方法的链式调用。- 当
-
@EqualsAndHashCode(callSuper = false)- Lombok 注解,用于自动生成
equals()和hashCode()方法。 callSuper = false表示生成这两个方法时不包含父类的属性(仅考虑当前类的字段)。如果设为true,则会将父类的属性也纳入计算(此处因继承自Object,影响不大)。
- Lombok 注解,用于自动生成
Swagger 注解
-
@ApiModel(value="通用查询配置对象", description="通用查询配置")- Swagger 注解,用于描述 API 接口中的实体类信息(在接口文档中展示)。
value是实体类的简要名称,description是详细描述,生成接口文档时会显示这些信息,方便开发者理解该实体的用途。
-
@ApiModelProperty(value = "主键")- Swagger 注解,用于描述实体类的字段信息(在接口文档中展示)。
value是字段的说明,生成文档时会显示该字段的含义,帮助开发者理解接口参数或返回值中该字段的作用。
Jackson 注解
-
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")- Jackson 注解,用于指定 JSON 序列化 / 反序列化时日期字段的格式和时区。
pattern定义了日期的格式(年 - 月 - 日 时:分: 秒),timezone = "GMT+8"指定时区为东八区(避免时区转换导致的时间偏差)。当实体类被转为 JSON 时,日期会按此格式显示;接收 JSON 时,也会按此格式解析。
-
JsonInclude(JsonInclude.Include.NON_NULL)
- 作用于类级别或者字段级别,当某个字段的值为nul时,该字段不会被序列化到最终的JSON字符串中。
ArticleFunctionResponse response = new ArticleFunctionResponse(); response.setMsg("请求成功"); // 序列化后的JSON(不加该注解会是 {"code":null,"msg":"请求成功"}) // 加了该注解后是 {"msg":"请求成功"} -
@JsonProperty(required = true, value = "code")
这个注解作用于字段级别,是 Jackson 中最常用的注解之一,核心作用是定义 Java 字段与 JSON 属性的映射关系:
-
value = "code":明确指定该 Java 字段(private Integer code)对应 JSON 字符串中的键名是code。- 场景:如果 Java 字段名和 JSON 键名不一致(比如 Java 字段是
codeNum,但接口返回的 JSON 键是code),就需要通过value指定映射关系,否则序列化 / 反序列化会失败。 - 补充:如果 Java 字段名和 JSON 键名完全一致(比如这里的
code),value参数可以省略,注解简化为@JsonProperty。
- 场景:如果 Java 字段名和 JSON 键名不一致(比如 Java 字段是
-
required = true:重点注意—— 这个参数的常见误解是 “反序列化时必须有该字段,否则报错”,但实际 Jackson 默认不会因为required=true就抛出异常;它的核心作用是:- 生成 API 文档时(比如 Swagger/OpenAPI),标记该字段为必填项;
- 配合 Jackson 的严格校验配置(需额外设置),才能实现反序列化时 “无该字段则报错” 的效果。
spring注解
-
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")- Spring 注解,用于指定前端传递的日期字符串参数绑定到后端实体类日期字段时的格式。
- 例如,前端传递
2024-05-21 10:30:00字符串时,Spring 会自动按此格式解析为Date类型对象。
-
@Primary- 作用:在 Spring 容器中存在多个同类型的 Bean时,指定其中一个为优先被注入的 Bean。
- 场景:比如你定义了两个
RedissonClient类型的 Bean,当其他组件需要注入RedissonClient时,Spring 会优先选择被@Primary标记的那个。
-
@ConditionalOnMissingBean(RedissonClient.class)注解- 作用:属于 Spring Boot 的条件注解,意思是当容器中不存在
RedissonClient类型的 Bean 时,当前被注解的 Bean 才会被创建。 - 场景:用于 “自定义扩展” 或 “默认实现” 的场景,允许用户先自定义
RedissonClient,若用户没定义,就使用框架提供的默认实现。
- 作用:属于 Spring Boot 的条件注解,意思是当容器中不存在
这两个注解常结合用于 ** 框架的 “默认 Bean + 自定义覆盖”** 逻辑:
- 用
@ConditionalOnMissingBean提供一个 “默认 Bean”,允许用户自定义; - 用
@Primary标记这个默认 Bean(防止用户自定义时出现多个 Bean 的注入歧义,若用户自定义了 Bean,@Primary也不会生效,因为默认 Bean 根本没创建)。
@RequestParam注解
- 加 @RequestParam 的情况
public Response updateConfig(@RequestParam String key, @RequestParam String value)
特点:
- 明确指定从请求参数获取
- 参数名与变量名一致(如 key 对应 ?key=xxx)
- 默认必传;缺失会报 400
- 可自定义参数名:@RequestParam("paramKey") String key
- 可设为非必传:@RequestParam(required = false) String key
- 可设默认值:@RequestParam(defaultValue = "default") String key
- 不加 @RequestParam 的情况
public Response updateConfig(String key, String value)
特点:
- 默认按参数名匹配(?key=xxx&value=xxx)
- 简单类型(String、Integer、Boolean 等)可省略注解
- 如果参数名不匹配或类型复杂,可能无法正确绑定
JeecgBoot注解
-
@Excel(name = "数据源名称", width = 15)- JeecgBoot 集成的 POI 注解(用于 Excel 导入导出),指定该字段在 Excel 中的列名和宽度。
name是 Excel 表头的名称,width是列的宽度(单位为字符)。当导出数据到 Excel 时,该字段会按此配置显示;导入时,也会根据表头匹配字段。