C# 入坑JAVA 潜规则 注解 列表 listMch,该列表存储了一个映射(Map)的集合 等 入门系列3
java 项目结构 文件说明 潜规则 java入门-CSDN博客
C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2-CSDN博客
java注解 好像和C# 特性 差不多
@Data @Builder @NoArgsConstructor @AllArgsConstructor
在Java中,@Data
、@Builder
、@NoArgsConstructor
和@AllArgsConstructor
是Lombok库提供的注解,它们用于简化Java对象的创建和处理。Lombok是一个流行的Java库,旨在减少样板代码的编写,让开发者能够更专注于业务逻辑。下面是这些注解的简要说明:
-
@Data
:- 这是一个聚合注解,它自动为类生成getter和setter方法、
toString()
、equals()
和hashCode()
方法。它还包含了@ToString
、@EqualsAndHashCode
、@Getter
、@Setter
和@RequiredArgsConstructor
的功能。
- 这是一个聚合注解,它自动为类生成getter和setter方法、
-
@Builder
:- 这个注解用于在类上创建一个builder模式的构建器,允许通过链式调用来设置对象的属性。使用
@Builder
注解可以很容易地创建对象,特别是当对象有很多属性时。
- 这个注解用于在类上创建一个builder模式的构建器,允许通过链式调用来设置对象的属性。使用
-
@NoArgsConstructor
:- 这个注解让Lombok为类生成一个无参的构造函数。这对于创建没有初始值的对象实例很有用。
-
@AllArgsConstructor
:- 这个注解让Lombok为类生成一个包含所有属性的构造函数。这对于创建完全初始化的对象实例很有用。
这些注解通常用于模型类或DTO(数据传输对象),以减少手动编写常见方法的时间。例如,一个使用这些注解的简单类可能看起来像这样:
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {private String name;private int age;private String email;
}
在这个例子中,Person
类将自动拥有以下功能:
- Getter和Setter方法
toString()
、equals()
和hashCode()
方法- 一个无参构造函数
- 一个包含所有属性的构造函数
- 一个builder模式的构建器
使用这些注解,你可以这样创建Person
对象:
Person person = new Person();
Person personWithAllArgsConstructor = new Person("John Doe", 30, "john.doe@example.com");
Person personWithBuilder = Person.builder().name("Jane Doe").age(25).email("jane.doe@example.com").build();
请注意,要使用Lombok注解,你需要在项目中添加Lombok依赖,并在IDE中安装相应的插件,以便正确地识别和处理这些注解。
java String 变LocalDateTime
//2024-09-29 12:30 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse(createReqVO.getSolDeliveryDate(), formatter); order.setSolDeliveryDate(dateTime);
JAVA 集合
List<Map<String, Object>> listMch = new ArrayList<>();
Map<String, Object> mch1 = new HashMap<>();
List<Map<String, Object>> listMch = new ArrayList<>();Map<String, Object> mch1 = new HashMap<>();mch1.put("mchName", "海口");mch1.put("userId", 0);mch1.put("mchId", 4);mch1.put("warehouseId", 0);listMch.add(mch1);
您提供的代码是Java语言的一段示例,它创建了一个列表 listMch
,该列表存储了一个映射(Map
)的集合,每个映射代表一个商户(mch
)的信息。然后,代码创建了一个 HashMap
实例 mch1
,并向其中添加了几个键值对来存储特定商户的信息,最后将这个映射添加到了列表 listMch
中。
这里是代码的详细解释:
-
List<Map<String, Object>> listMch = new ArrayList<>();
:- 这行代码创建了一个
ArrayList
,它的泛型参数是Map<String, Object>
。这意味着listMch
可以存储Map
对象的列表,其中每个Map
的键是String
类型,值是Object
类型。
- 这行代码创建了一个
-
Map<String, Object> mch1 = new HashMap<>();
:- 这行代码创建了一个
HashMap
实例mch1
,它也是键值对的集合,键是String
类型,值是Object
类型。
- 这行代码创建了一个
-
mch1.put("mchName", "海口");
:- 这行代码向
mch1
映射中添加了一个键值对,键是"mchName"
,值是字符串"海口"
。
- 这行代码向
-
mch1.put("userId", 0);
:- 向
mch1
映射中添加了另一个键值对,键是"userId"
,值是整数0
。
- 向
-
mch1.put("mchId", 4);
:- 再次向
mch1
映射中添加键值对,键是"mchId"
,值是整数4
。
- 再次向
-
mch1.put("warehouseId", 0);
:- 向
mch1
映射中添加最后一个键值对,键是"warehouseId"
,值是整数0
。
- 向
-
listMch.add(mch1);
:- 最后,这行代码将填充好的
mch1
映射添加到listMch
列表中。
- 最后,这行代码将填充好的
这段代码通常用于初始化数据,可能用于测试、数据模型的演示或者在应用程序中创建一个包含商户信息的列表。每个映射可以看作是数据库中的一行记录或者是一个JSON对象。在实际的应用程序中,这些数据可能会被用来填充用户界面、进行业务逻辑处理或者通过网络发送到其他服务。
JAVA 集合 再包一层集合
Map<String, List<Map<String, Object>>> result = new HashMap<>();
result.put("listMch", listMch);
在您提供的代码片段中,您创建了一个类型为 Map<String, List<Map<String, Object>>>
的 result
变量,并将其实例化为一个 HashMap
。然后,您将之前创建的 listMch
(它是一个 List<Map<String, Object>>
类型的变量)添加到 result
映射中,键为 "listMch"
。
这里是代码的详细解释:
-
Map<String, List<Map<String, Object>>> result = new HashMap<>();
:- 这行代码创建了一个
HashMap
实例result
。这个映射的键是String
类型,值是List<Map<String, Object>>
类型。这意味着result
可以存储一个或多个键值对,其中每个键都映射到一个列表,列表中的每个元素都是一个映射(Map
),映射的键和值都是Object
类型。
- 这行代码创建了一个
-
result.put("listMch", listMch);
:- 这行代码调用
result
映射的put
方法,将键"listMch"
和值listMch
添加到映射中。这里的listMch
是一个之前定义的List<Map<String, Object>>
类型的变量,它包含了商户信息的列表。
- 这行代码调用
这段代码通常用于将数据组织成层次结构,以便于后续处理或传输。例如,您可能需要将这些数据发送到前端应用程序,或者在内部逻辑中使用这些数据。
在实际应用中,result
映射可以被序列化为JSON格式,以便于通过网络发送,或者在不同的系统和组件之间进行数据交换。例如,如果您使用Jackson或Gson这样的JSON库,您可以轻松地将 result
转换为JSON字符串:
import com.fasterxml.jackson.databind.ObjectMapper;// ...ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(result);
System.out.println(jsonString);
多维数据 属性规格
/** * 属性数组,JSON 格式 */@TableField(typeHandler = JacksonTypeHandler.class)
private List<Property> properties;/*** 商品属性*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Property {/*** 属性编号* 关联 {@link ProductPropertyDO#getId()}*/private Long propertyId;/*** 属性名字* 冗余 {@link ProductPropertyDO#getName()}** 注意:每次属性名字发生变化时,需要更新该冗余*/private String propertyName;/*** 属性值编号* 关联 {@link ProductPropertyValueDO#getId()}*/private Long valueId;/*** 属性值名字* 冗余 {@link ProductPropertyValueDO#getName()}** 注意:每次属性值名字发生变化时,需要更新该冗余*/private String valueName;}
在Java中,如果你想要循环遍历一个List<ProductPropertyValueDetailRespDTO>
列表,并查找其中skuId
属性值不一样的对象,你可以使用一个简单的for
循环或者forEach
循环来实现。以下是两种常见的方法:
JAVA forEach循环list对象 set 更新list某属性值
import java.util.List;// 假设你有一个List<ProductPropertyValueDetailRespDTO>类型的列表
List<ProductPropertyValueDetailRespDTO> list = ...;// 使用forEach循环遍历列表
list.forEach((dto, index) -> {if (index > 0 && !dto.getSkuId().equals(list.get(index - 1).getSkuId())) {// 找到skuId属性值不一样的对象System.out.println("找到skuId属性值不一样的对象: " + dto);}
});
if(sku.getProperties()!=null) {sku.getProperties().forEach(t->t.setSkuId(id)); }
在这个例子中,forEach
循环提供了当前遍历到的对象dto
和它的索引index
。通过比较当前对象的skuId
与前一个对象的skuId
(通过索引index - 1
获取),可以找到skuId
属性值不一样的对象。
JAVA For
使用传统的for
循环list对象
import java.util.List;// 假设你有一个List<ProductPropertyValueDetailRespDTO>类型的列表
List<ProductPropertyValueDetailRespDTO> list = ...;// 假设你有一个引用,用于保存上一个遍历到的对象
ProductPropertyValueDetailRespDTO previousDto = null;for (ProductPropertyValueDetailRespDTO dto : list) {if (previousDto != null && !dto.getSkuId().equals(previousDto.getSkuId())) {// 找到skuId属性值不一样的对象System.out.println("找到skuId属性值不一样的对象: " + dto);}previousDto = dto;
}
if(sku.getProperties()!=null) {List<CartDO> cartList = cartMapper.selectListByUserIdAndSpuId(userId,cart.getSpuId());for (CartDO dto : cartList) {if (!cart.getSkuId().equals(dto.getSkuId())) {throw exception(CARD_ITEM_NOTDOUBLE_FOUND);}} }
在这个例子中,previousDto
用于保存上一个遍历到的ProductPropertyValueDetailRespDTO
对象。在每次循环中,都会检查当前对象的skuId
是否与上一个对象的skuId
不同。如果不同,就表示找到了一个skuId
属性值不一样的对象。
疑问:为什么 Controller 分成 Admin 和 App 两种?
提供给 Admin 和 App 的 RESTful API 接口是不同的,拆分后更加清晰。
疑问:为什么 VO 分成 Admin 和 App 两种?
相同功能的 RESTful API 接口,对于 Admin 和 App 传入的参数、返回的结果都可能是不同的。例如说,Admin 查询某个用户的基本信息时,可以返回全部字段;而 App 查询时,不会返回 mobile 手机等敏感字段。
疑问:为什么 DO 不作为 Controller 的出入参?
- 明确每个 RESTful API 接口的出入参。例如说,创建部门时,只需要传入 name、parentId 字段,使用 DO 接参就会导致 type、createTime、creator 等字段可以被传入,导致前端同学一脸懵逼。
- 每个 RESTful API 有自己独立的 VO,可以更好的设置 Swagger 注解、Validator 校验规则,而让 DO 保持整洁,专注映射好数据库表。
当前时间
LocalDateTime.now()
项目备注 当前登入人
getLoginUserId()
插件设置
代码热加载
在日常开发中,我们需要经常修改 Java 代码,手动重启项目,查看修改后的效果。如果在项目小时,重启速度比较快,等待的时间是较短的。但是随着项目逐渐变大,重启的速度变慢,等待时间 1-2 min 是比较常见的。
这样就导致我们开发效率降低,影响我们的下班时间,哈哈哈~
那么是否有方式能够实现,在我们修改完 Java 代码之后,能够不重启项目呢?答案是有的,通过 代码热加载 的方式。实现方案有三种:
- spring-boot-devtools【不推荐】
- IDEA 自带 HowSwap 功能【推荐】
- JRebel 插件【最推荐】
1. spring-boot-devtools
spring-boot-devtools (opens new window)是 Spring Boot 提供的开发者工具,它会监控当前应用所在的 classpath 下的文件发生变化,进行自动重启。
devtools 存在重启速度较慢的问题,所以不推荐!
#2. IDEA 自带 HowSwap 功能
该功能是 IDEA Ultimate 旗舰版的专属功能,不支持 IDEA Community 社区版。
#2.1 如何使用
① 设置 Spring Boot 启动类,开启 HotSwap 功能。如下图所示:
② Debug 运行该启动类,等待项目启动完成。
③ 每次修改 Java 代码后,点击左下角的「热加载」按钮,即可实现代码热加载。如下图所示:
#2.2 存在问题
IDEA 自带 HowSwap 功能,支持比较有限,很多修改都不支持。例如说:
- 只能增加方法或字段但不可以减少方法或字段
- 只能增加可见性不能减少
- 只能维持已有方法的签名而不能修改等等。
你可以认为,只支持方法内的代码修改热加载。
如果想要相对完美的方案,建议使用 JRebel 插件。
#3. JRebel 插件【最推荐】
JRebel 插件是目前最好用的热加载插件,它支持 IDEA Ultimate 旗舰版、Community 社区版。
相关文章:

C# 入坑JAVA 潜规则 注解 列表 listMch,该列表存储了一个映射(Map)的集合 等 入门系列3
java 项目结构 文件说明 潜规则 java入门-CSDN博客 C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2-CSDN博客 java注解 好像和C# 特性 差不多 Data Builder NoArgsConstructor AllArgsConstructor 在Java中,Data、Builder、NoArgsConstructor和Al…...
2024年9月个人工作生活总结
本文为 2024年9月工作生活总结。 研发编码 vuepress构建的几个问题 某vuepress项目,是我在3年多以前自行构想自行着手搞的,主要用于将一些常用的数据文件(markdown样式)渲染成html网页文件,在自建服务程序里开启访问…...
JVM有哪些参数以及如何使用
JVM(Java虚拟机)参数用于调整和优化Java应用程序的性能和行为。这些参数主要分为标准参数、非标准参数(以-X开头)和高级参数(以-XX开头)。以下是一些常见的JVM参数及其使用方法: 标准参数 -se…...

STM32编码器接口解析及抗噪声措施探讨
1. 引言 在现代控制系统中,编码器扮演着非常重要的角色。它就像一个精密的测量工具,可以告诉我们机械部件的位置和运动状态。在STM32微控制器中,编码器接口可以轻松地与各种编码器连接,实现精确的控制。我将在这里探讨STM32编码器…...

微软发布Windows 11 2024更新,新型Copilot+ AI PC功能亮相
前言 微软在Windows 11的2024更新中加强了对人工智能的应用,推出了新功能Copilot。 此次更新的版本号为26100.1742,Copilot将首先在Windows Insider中推出,计划于11月向特定设备和市场推广,用户需开启“尽快获取最新更新”选项以…...
鹏哥C语言68-70---位操作符+单目操作符+关系操作符
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <time.h> //--------------------------------------------------------------------------------------------------------4.位操作符 // &----按(2进制…...

showdoc二次开发
showdoc用的vue版本老,需要安装老版本nodejs,比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…...

力扣16~20题
题16(中等): 思路: 双指针法,和15题差不多,就是要排除了,如果total<target则排除了更小的(left右移),如果total>target则排除了更大的(rig…...

Pikachu-Sql-Inject -基于boolian的盲注
基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…...
最后30天,你的系统集成项目管理工程师备考进度到哪儿了?
十一长假归来好! 此次归来之后,2024年下半年软考倒计时就从4字头切换到了3字头,今天距离考试还有32天! 那么问题来了,临近考试还有30天左右的时候,你的备考进度到哪里了呢? 其实无论目前你的实际…...
网络安全事件的发生,主要原因是什么
网络安全事件的发生,主要原因涉及多个方面,包括技术漏洞、人为因素、经济利益驱动、恶意软件和病毒威胁、社会工程学攻击、内部人员恶意行为、供应链安全问题以及法律法规的不完善等。以下是对这些原因的详细分析: 技术漏洞: 软件…...

【leetcode】274.H指数
为了方便,将 citations 记为 cs。 所谓的 h 指数是指一个具体的数值,该数值为“最大”的满足「至少发表了 x 篇论文,且每篇论文至少被引用 x 次」定义的合法数,重点是“最大”。 用题面的实例 1 来举个 🌰࿰…...

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)
一、字面量 1、基本介绍 在代码中,被写直接下来的、不需要通过变量存储的值,称之为字面量 2、常用值类型 类型说明数字(Number)整数(int),例如:10、-10浮点数(float&…...
【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)
梯度消失(Vanishing Gradient) 和梯度爆炸(Exploding Gradient) 是神经网络训练中的常见问题,特别是在深层神经网络(DNN)或递归神经网络(RNN)中。这两者主要与反向传播算…...
在 ArkTS 网络请求中,重新封装一下 http 模块
在ArkTS中,重新封装http模块可以提供一个更简洁、更易于使用的API,同时隐藏底层细节,使开发者能够更专注于业务逻辑。以下是一个简单的示例,展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块: // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁
不過受到 Recall 事件的影響,更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面,並增加了一些新的功能,像是 Copilot Voice 能讓你與 AI 助手進行對話式…...

系统架构设计师-论文题(2021年下半年)
1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序,通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)
selenium的webdriver介绍 从selenium导入webdriver模块,在pycharm中跳转webdriver模块的__init__.py文件,内容如图所示:从selenium包的子目录中导入了很多模块并做了重命名,用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…...

73.【C语言】C/C++的内存区域划分
目录 1.内存里的几个区域 2.示意图 3.解释 1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射的含义: 如果看过李忠…...

k8s 中存储之 hostPath 卷
目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化,它会随着Pod的结束而销…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...