ruoyi-cloud-notes01

1、Maven中的dependencyManagement

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。
eg:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ruoyi</groupId><artifactId>ruoyi-api-bom</artifactId><packaging>pom</packaging><version>1.8.0</version><description>ruoyi-api-bom api依赖项</description><dependencyManagement><dependencies><!-- 系统接口 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-api-system</artifactId><version>${project.version}</version></dependency><!-- 资源服务接口 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-api-resource</artifactId><version>${project.version}</version></dependency></dependencies></dependencyManagement>
</project>

.

2、@Data

@Data注解的主要作用是提高代码的简洁,使用这个注解可以省去实体类中大量的get()、 set()、 toString() 等方法。
在实体类上注解
eg:

package com.ruoyi.system.api.domain;import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** 当前在线会话** @author Lion Li*/@Data
@NoArgsConstructor
public class SysUserOnline implements Serializable {/*** 会话编号*/private String tokenId;/*** 部门名称*/private String deptName;/*** 用户名称*/private String userName;/*** 登录IP地址*/private String ipaddr;/*** 登录地址*/private String loginLocation;/*** 浏览器类型*/private String browser;/*** 操作系统*/private String os;/*** 登录时间*/private Long loginTime;}

.

3、@NoArgsConstructor和@AllArgsConstructor

@NoArgsConstructor:生成无参的构造方法。
@AllArgsConstructor:生成该类下全部属性的构造方法。

在springboot中,对于一个bean类,注入其他bean的时候,常见的是使用@Autowired,实际上也可以使用构造函数注入,这个时候就可以使用@AllArgsConstructor或者@RequiredArgsConstructor来代替。
详细见@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别以及在springboot常用地方
.

4、@EqualsAndHashCode

@EqualsAndHashCode注解的作用就是自动实现model类的equals方法和hashcode方法

  • @EqualsAndHashCode(callSuper = true),就是用自己的属性和从父类继承的属性来生成hashcode;
  • @EqualsAndHashCode(callSuper = false),就是只用自己的属性来生成hashcode;
  • @Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集, 和@EqualsAndHashCode默认是false。

详细见Lombok 中 @EqualsAndHashCode注解的使用
.

5、@TableName、@TableField、@TableLogic

  • @TableName(value = …)
    当数据库名与实体类名不一致或不符合驼峰命名时,需要在此注解指定表名(不加这个注解默认将实体类的小写形式在db中寻找)

  • @TableField 字段注解,该注解用于标识非主键的字段。将数据库列与 JavaBean 中的属性进行映射

  • @TableLogic:在实体类中属性加上@TableLogic注解,表示该字段是逻辑删除字段。

  • @TableField(exist = false) :可以解决表中表的问题,加载bean属性上,表示当前属性不是数据库的字段(非数据库字段),但在项目中必须使用,这样可以用来把一个数据表当作一个字段来输出,用来实现表中表数据输出。

  • @TableField(fill = FieldFill.*):用于设置实体类中对应的字段在插入时需要填充,FieldFill 是一个枚举类型,它定义了 4 种自动填充策略,分别为:DEFAULT: 不进行任何填充、INSERT: 插入时填充、UPDATE: 更新时填充、INSERT_UPDATE: 插入和更新时都填充。当我们在实体类中使用 @TableField(fill = FieldFill.INSERT) 注解时,表示该字段在插入数据时会自动填充相应的值,而在更新数据时不会进行填充。

eg:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

详细见注解@TableName、@TableField
.

6、Spring校验注解:@NotNull、@NotBlank、@NotEmpty

  • 1.@NotNull
    不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
  • 2.@NotEmpty
    不能为 null,且长度必须大于 0,一般用在集合类上或者数组上
  • 3.@NotBlank
    只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符

注:

  • 注意在使用 @NotBlank 等注解时,一定要和 @valid 一起使用,否则 @NotBlank 不起作用。
  • 一个 BigDecimal 的字段使用字段校验标签应该为 @NotNull。
  • 在使用 @Length 一般用在 String 类型上可对字段数值进行最大长度限制的控制。
  • 在使用 @Range 一般用在 Integer 类型上可对字段数值进行大小范围的控制。

在这里插入图片描述

详细见常用的校验注解之 @NotNull、@NotBlank、@NotEmpty 的区别
.

7、@Validated,@Email,@Size、@Length、@Max、@Min

  • @Validated:对传输的参数进行数据校验,可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
  • @Email :被注释的元素必须是电子邮件地址
  • @Min 验证 Number 和 String 对象是否大等于指定的值
  • @Max 验证 Number 和 String 对象是否小等于指定的值
  • @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
  • @Length(min=, max=) 验证字符串长度是否在给定的范围之内
    max和min是对你填的“数字”是否大于或小于指定值,这个“数字”可以是number或者string类型。长度限制用length。
    在这里插入图片描述

详细见SpringBoot @Validated注解实现参数校验
.

8、@ExcelIgnoreUnannotated、@ExcelProperty

  • @ExcelIgnoreUnannotated:没有注解的字段都不转换(EasyExcel里的注解)
  • @ExcelProperty:用于匹配excel和实体类的匹配,参数:value是列名,index是列名的序号, converter默认自动选择,指定当前字段用什么转换器,默认会自动选择。写的情况下只要实现com.alibaba.excel.converters.Converter#convertToExcelData(com.alibaba.excel.converters.WriteConverterContext) 方法即可。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

注:
1、这里自己编写了字典格式化@ExcelDictFormat注解类:

package com.ruoyi.common.excel.annotation;import com.ruoyi.common.core.utils.StringUtils;import java.lang.annotation.*;/*** 字典格式化*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ExcelDictFormat {/*** 如果是字典类型,请设置字典的type值 (如: sys_user_sex)*/String dictType() default "";/*** 读取内容转表达式 (如: 0=男,1=女,2=未知)*/String readConverterExp() default "";/*** 分隔符,读取字符串组内容*/String separator() default StringUtils.SEPARATOR;}

2、在@ExcelProperty(value = “是否默认”, converter = ExcelDictConvert.class),字典格式化转换处理ExcelDictConvert实现了Converter<Object '> 里的方法:

package com.ruoyi.common.excel.convert;import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.ruoyi.common.core.service.DictService;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.utils.ExcelUtil;
import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Field;/*** 字典格式化转换处理*/
@Slf4j
public class ExcelDictConvert implements Converter<Object> {@Overridepublic Class<Object> supportJavaTypeKey() {return Object.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return null;}@Overridepublic Object convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {ExcelDictFormat anno = getAnnotation(contentProperty.getField());String type = anno.dictType();String label = cellData.getStringValue();String value;if (StringUtils.isBlank(type)) {value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator());} else {value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator());}return Convert.convert(contentProperty.getField().getType(), value);}@Overridepublic WriteCellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {if (ObjectUtil.isNull(object)) {return new WriteCellData<>("");}ExcelDictFormat anno = getAnnotation(contentProperty.getField());String type = anno.dictType();String value = Convert.toStr(object);String label;if (StringUtils.isBlank(type)) {label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator());} else {label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator());}return new WriteCellData<>(label);}private ExcelDictFormat getAnnotation(Field field) {return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class);}
}

详细见EasyExcel 样式注解大全 和 Easy Excel 常用注解
.

9、@Pattern

@Pattern:检验,比如时间格式校验、字典类型校验
把这个注解加在entity的参数上,可以选择分类也可以默认;关于注解中需要传的参数:一般默认就填入正则表达式即可,但是java中字符串需要转义。
在这里插入图片描述
.

10、@JsonIgnore、@JsonProperty

  • @JsonIgnore
    作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

  • @JsonProperty
    作用:主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别)

  • @JsonInclude
    作用:是jackSon中最常用的注解之一,是为实体类在接口序列化返回值时增加规则的注解。

在这里插入图片描述
在这里插入图片描述

详细见json过滤某些属性 之@jsonignore
和@JsonProperty使用详解
和@JsonInclude注解
.

11、Tree基类

在这里插入图片描述

package com.ruoyi.common.core.web.domain;import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.util.ArrayList;
import java.util.List;/*** Tree基类*/@Data
@EqualsAndHashCode(callSuper = true)
public class TreeEntity<T> extends BaseEntity {private static final long serialVersionUID = 1L;/*** 父菜单名称*/@TableField(exist = false)private String parentName;/*** 父菜单ID*/private Long parentId;/*** 子部门*/@TableField(exist = false)private List<T> children = new ArrayList<>();}

.

12、Entity基类

在这里插入图片描述

package com.ruoyi.common.core.web.domain;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** Entity基类*/@Data
public class BaseEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 搜索值*/@JsonIgnore@TableField(exist = false)private String searchValue;/*** 创建者*/@TableField(fill = FieldFill.INSERT)private String createBy;/*** 创建时间*/@TableField(fill = FieldFill.INSERT)private Date createTime;/*** 更新者*/@TableField(fill = FieldFill.INSERT_UPDATE)private String updateBy;/*** 更新时间*/@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;/*** 请求参数*/@JsonInclude(JsonInclude.Include.NON_EMPTY)@TableField(exist = false)private Map<String, Object> params = new HashMap<>();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/53545.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C#学习笔记】值类型(2)

文章目录 Struct结构体类型为什么不推荐struct 元组类型可为空的值类型从可为空的值类型转换为基础类型提升的运算符如何确定可为空的值类型为什么建议少用T?装箱和取消装箱 Struct结构体类型 结构类型&#xff08;“structure type”或“struct type”&#xff09;是一种可封…

React Native从文本内容尾部截取显示省略号

<Textstyle{styles.mMeNickname}ellipsizeMode"tail"numberOfLines{1}>{userInfo.nickname}</Text> 参考链接&#xff1a; https://www.reactnative.cn/docs/text#ellipsizemode https://chat.xutongbao.top/

软考高级架构师——2、操作系统

一、进程管理 • 进程的状态&#xff08;★&#xff09; • 进程的同步与互斥&#xff08;★★★★&#xff09; 临界资源&#xff1a;诸进程间需要互斥方式对其进行共享的资源&#xff0c;如打印机、磁带机等 临界区&#xff1a;每个进程中访问临界资源的那段代码称为临界区…

致远A8+数据库账密信息泄露

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 文章作者拥有对此文章的修改和解释权。如欲转载或传播此文章&#xff0c…

遮挡边界处的深度补全和双曲面外推

论文地址&#xff1a;Depth Completion with Twin Surface Extrapolation at Occlusion Boundaries 论文代码&#xff1a;https://github.com/imransai/TWISE 深度补全是从稀疏的已知深度值开始&#xff0c;为其余图像像素估计未知深度。 大多数方法将其建模为深度插值&#x…

【云原生】k8s组件架构介绍与K8s最新版部署

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;kubernetes_征服bug的博客-CSDN博客 目录 1 集群组件 1.1 控制平面组件&#xff08;Control Plane Components&#xff09; 1.2 Node 组件 1.3 插件 (Addons) 2 集群架构详细 3 集群搭建[重点] 3.1 mi…

【暑期每日一练】 day15

目录 选择题&#xff08;1&#xff09;解析&#xff1a; &#xff08;2&#xff09;解析&#xff1a; &#xff08;3&#xff09;解析&#xff1a; &#xff08;4&#xff09;解析&#xff1a; &#xff08;5&#xff09;解析&#xff1a; 编程题题一描述输入描述输出描述 示例…

406 · 和大于S的最小子数组

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; 题解&#xff1a;同向双指针 九章算法 - 帮助更多程序员找到好工作&#xff0c;硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param nums: an array …

目标检测中 anchor base和anchor free

目标检测中两种不同anchor的生成 趋势&#xff1a;anchor free越来越受到实时性检测的青睐&#xff0c;&#xff0c;&#xff0c;

HTML5 Canvas(画布)

<canvas>标签定义图形&#xff0c;比如图表和其他图像&#xff0c;你必须用脚本来绘制图形。 在画布上&#xff08; Canvas &#xff09;画一个共红色矩形&#xff0c;渐变矩形&#xff0c;彩色矩形&#xff0c;和一些彩色文字。 什么是 Canvas&#xff1f; HTML5<c…

机器学习笔记之优化算法(十)梯度下降法铺垫:总体介绍

机器学习笔记之优化算法——梯度下降法铺垫&#xff1a;总体介绍 引言回顾&#xff1a;线搜索方法线搜索方法的方向 P k \mathcal P_k Pk​线搜索方法的步长 α k \alpha_k αk​ 梯度下降方法整体介绍 引言 从本节开始&#xff0c;将介绍梯度下降法 ( Gradient Descent,GD ) …

SpringCloud入门Day01-服务注册与发现、服务通信、负载均衡与算法

SpringCloudNetflix入门 一、应用架构的演变 伴随互联网的发展&#xff0c;使用互联网的人群越来越多&#xff0c;软件应用的体量越来越大和复杂。而传统单体应用 可能不足以支撑大数据量以及发哦并发场景应用的框架也随之进行演变从最开始的单体应用架构到分布式&#xff08…