当前位置: 首页 > news >正文

mapstruct DTO转换使用

定义一个基础接口

package com.example.mapstruct;import org.mapstruct.Named;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;/*** @Author zmn @Date 2024/11/27 11:17 @Version 1.0*/
public interface BaseConverter<DTO, DB> {DTO do2Dto(DB db);List<DTO> dosToDtos(List<DB> dbs);@Named("localDateToLocalDateTime")default LocalDateTime localDateToLocalDateTime(LocalDate date) {return date.atStartOfDay();}@Named("localDateTimeToDate")default Date localDateTimeToDate(LocalDateTime localDateTime) {if (null == localDateTime) {return null;}ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());return Date.from(zonedDateTime.toInstant());}@Named("localDateToDate")default Date localDateTimeToDate(LocalDate localDateTime) {if (null == localDateTime) {return null;}ZonedDateTime zonedDateTime = localDateTime.atStartOfDay().atZone(ZoneId.systemDefault());return Date.from(zonedDateTime.toInstant());}
}

定义 dtoA 和dtoB 将dtoA 转成B(属性名不一样属性类型不一样)

@Data
public class BeanA {
private LocalDate localDate;
}
@Data
public class BeanB {
private LocalDateTime localDateTime;

}

@Mapper
public interface DtoBeanConverter extends BaseConverter<BeanB, BeanA> {DtoBeanConverter INSTANCE = Mappers.getMapper(DtoBeanConverter.class);@Mappings({@Mapping(source = "localDate",target = "localDateTime",qualifiedByName = "localDateToLocalDateTime")})BeanB do2Dto(BeanA beanA);
}

注意
1、在 POM中添加lombok一定在前才能生成DtoBeanConverterImpl
2、LocalDateTime 日期类型来自同一个包

 <plugin><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.5.3.Final</version></path></annotationProcessorPaths></configuration></plugin>

或者单独定义

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;public class DateMapper {// 将 LocalDateTime 转换为 Datepublic Date map(LocalDateTime value) {if (value == null) {return null;}return Date.from(value.atZone(ZoneId.systemDefault()).toInstant());}
}

在类中使用

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;@Mapper(uses = DateMapper.class)
public interface MyMapper {MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);@Mapping(source = "dateTime", target = "dateTime")Target map(Source source);
}

相关文章:

mapstruct DTO转换使用

定义一个基础接口 package com.example.mapstruct;import org.mapstruct.Named;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; import java.util.List;/*** Author zmn Dat…...

Linux(Centos7)---安装nginx(很简单)

安装 sudo yum install nginx -y开机启动与开启服务 sudo systemctl enable nginx sudo systemctl start nginx...

【接口调试】OpenAI ChatGPT API

【接口调试】AbortController 发出请求finish_reason 参数细节 – Openai ChatGPT 文档 发出请求 可以将以下命令粘贴到终端中以运行第一个API请求。 请确保用您的秘密API密钥替换$OPENAI_API_KEY。 curl https://api.openai.com/v1/chat/completions \-H "Content-Ty…...

云轴科技ZStack助力 “上科大智慧校园信创云平台”入选上海市2024年优秀信创解决方案

近日&#xff0c;为激发创新活⼒&#xff0c;促进信创⾏业⾼质量发展&#xff0c;由上海市经济信息化委会同上海市委网信办、上海市密码管理局、上海市国资委等主办的“2024年上海市优秀信创解决方案”征集遴选活动圆满落幕。云轴科技ZStack支持的“上科大智慧校园信创云平台”…...

CPU性能优化-CPU特性

现代CPU持续的添加新特性&#xff0c;使用这些特性可以大大简化找到底层问题的方法。 1 自顶向下微架构分析TMA&#xff0c;是一种识别应用程序低效使用CPU微架构的强大技术&#xff0c;识别负载的瓶颈&#xff0c;定位出现问题的代码具体位置&#xff0c;封装了CPU微架构中复杂…...

Idea使用Maven连接MySQL数据库

1.首先创建Maven文件 2.在pom.xml里添加代码&#xff0c;配置连接MySQL数据库所需要的配置文件。 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version&…...

《深入浅出HTTPS》读书笔记(13):块密码算法之迭代模式(续)

CTR模式 每次迭代运算的时候要生成一个密钥流&#xff08;keystream&#xff09;。 各个密钥流之间是有关系的&#xff0c;最简单的方式就是密钥流不断递增&#xff0c;所以才叫作计数器模式。 ◎在处理迭代之前&#xff0c;先生成每个密钥流&#xff0c;有n个数据块&#xff0…...

使用Cmake导入OpenCV库的大坑记录

CMakeLists.txt cmake_minimum_required(VERSION 3.20)set(OpenCV_DIR D:/Package/opencv4/opencv/mingw-build/install) #这里根据自己OpenCV位置设定find_package(OpenCV REQUIRED)project(PROJ1 CXX)add_executable(PROJ1 main.cpp)target_include_directories(PROJ1 PR…...

UE5 打包报错 Unknown structure 的解决方法

在虚幻引擎5.5 打包报错如下&#xff1a; UATHelper: 打包 (Windows): LogInit: Display: LogProperty: Error: FStructProperty::Serialize Loading: Property ‘StructProperty /Game/Components/HitReactionComponent/Blueprints/BI_ReactionInterface.BI_ReactionInterface…...

MySQL之单行函数

目录 1. 函数的理解 单行函数 2. 数值函数 2.1 基本函数 2.2 角度与弧度互换函数 2.3 三角函数 2.4 指数与对数 2.5 进制间的转换 3. 字符串函数 4. 日期和时间函数 4.1 获取日期、时间 4.2 日期与时间戳的转换​编辑 4.3 获取月份、星期、星期数、天数等函数 4.4 …...

spring-boot自定义ApplicationListener及源码分析

ApplicationListener是spring boot应用启动时的事件监听器。监听的事件有&#xff08;包括但不限于&#xff09;&#xff1a; &#xff08;1&#xff09;接下来&#xff0c;我们先通过一个例子实现自定义ApplicationListener&#xff1a; 监听器需要实现ApplicationListener<…...

C语言:深入理解指针

一.内存和地址 我们知道计算机上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数据也会放回内存中&#xff0c;那我们买电脑的时候&#xff0c;电脑上内存是 8GB/16GB/32GB 等&#xff0c;那这些内存空间…...

【WPF实现RichTextBox添加文本、自动滚动】

前言 使用WPF 中的RichTextBox控件实现添加文本后自动滚动末尾。因为RichTextBox无法直接绑定数据&#xff0c;所以通过引用System.Windows.Interactivity实现&#xff08;System.Windows.Interactivity.WPF&#xff09; 代码 MainWindow.xaml <Window x:Class"WPF…...

量化交易系统开发-实时行情自动化交易-8.4.MT4/MT5平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于MT4/MT5平台介绍。 MetaT…...

【HarmonyOS】@Observed和@ObjectLink嵌套对象属性更改UI不刷新问题

【HarmonyOS】Observed和ObjectLink嵌套对象属性更改UI不刷新问题 一、问题背景 使用了Observed和ObjectLink&#xff0c;修改嵌套对象的属性&#xff0c;UI还是不刷新&#xff0c;常见的问题有以下三种形式&#xff1a; 1.多级嵌套&#xff0c;嵌套对象的类并没有添加Observ…...

什么是默克尔树(Merkle Tree)?如何计算默克尔根?

默克尔树的概念 默克尔树(Merkle Tree)是一种特殊的二叉树&#xff0c;它的每个节点都存储了一个数据块的哈希值。哈希值是一种可以将任意长度的数据转换为固定长度的字符串的算法&#xff0c;它具有唯一性和不可逆性的特点&#xff0c;即不同的数据块会产生不同的哈希值&…...

眼部按摩仪WT2605音频蓝牙语音芯片方案 单芯片实现语音提示及控制/手机无线音频传输功能

随着科技的快速发展&#xff0c;人们的生活方式也在不断改变&#xff0c;智能化、便捷化的产品逐渐成为市场的主流。眼部按摩仪作为一种结合了现代科技与健康生活理念的产品&#xff0c;受到了广大消费者的青睐。而在众多眼部按摩仪中&#xff0c;采用WT2605音频蓝牙芯片的方案…...

python打包深度学习虚拟环境

今天师兄让我把环境打包发给他&#xff0c;我才知道可以直接打包深度学习虚拟环境&#xff0c;这样另一个人就不用辛辛苦苦的去装环境了&#xff0c;我们都知道有些论文他需要的环境很难装上。比如装Apex&#xff0c;装 DCN&#xff0c;mmcv-full 我现在把3090机子上的ppft虚拟…...

springboot358智慧社区居家养老健康管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 智慧社区居家养老健康管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&…...

复杂网络(二)

一、网络的基本静态几何特征 1.1 度分布 节点的度&#xff1a;在网络中&#xff0c;节点的邻边数称为该节点的度 对于网络中所有节点的度求平均&#xff0c;可得到网络的平均度 度分布&#xff1a;大多数实际网络中的节点的度满足一定的概率分布。定义P(k)为网络中度为k的节…...

Hi3559AV100 MPP开发:从IMX334到HDMI输入,VI参数配置避坑指南(含/proc/umap解析)

Hi3559AV100 MPP开发实战&#xff1a;非标准HDMI输入与VI参数配置深度解析 当我们需要在Hi3559AV100平台上接入HDMI视频源时&#xff0c;传统的MIPI摄像头配置方案往往无法直接适用。本文将从一个真实项目案例出发&#xff0c;详细讲解如何将原本为IMX334 MIPI摄像头设计的VI参…...

Jentic Mini:为AI智能体构建安全的API执行层与凭据管理方案

1. 项目概述&#xff1a;为AI智能体构建安全的API执行层 如果你正在开发AI智能体&#xff0c;并且希望它能帮你操作Notion、Slack、GitHub这些真实世界的服务&#xff0c;那你一定遇到过这个核心难题&#xff1a;怎么把API密钥安全地交给它&#xff1f;直接把密钥塞进提示词里&…...

模函数激活:挑战ReLU的极致简洁方案,为CV与TinyML带来性能突破

1. 项目概述&#xff1a;为什么我们需要重新审视激活函数&#xff1f;在深度学习的工具箱里&#xff0c;激活函数可能是最不起眼&#xff0c;却又最不可或缺的部件。它就像神经网络中的“开关”或“阀门”&#xff0c;决定了每个神经元是否被激活&#xff0c;以及激活的程度。长…...

初创团队如何借助Taotoken统一管理AI模型调用与成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何借助Taotoken统一管理AI模型调用与成本 对于资源有限的初创技术团队而言&#xff0c;在产品中集成人工智能功能已成为…...

PEX8796实战解析:从芯片特性到PCIe扩展设计的关键考量

1. PEX8796芯片基础认知与核心特性 第一次拿到PEX8796这颗PCIe交换芯片时&#xff0c;我盯着密密麻麻的引脚图发了半小时呆。作为PLX&#xff08;现已被博通收购&#xff09;的经典产品&#xff0c;这颗芯片在工业控制、服务器扩展等领域已经默默服役了十余年。实测中发现&…...

文献处理效率暴跌?NotebookLM Agent的3层语义理解架构,让PDF秒变可推理知识图谱!

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;文献处理效率暴跌&#xff1f;NotebookLM Agent的3层语义理解架构&#xff0c;让PDF秒变可推理知识图谱&#xff01; 传统PDF阅读工具仅支持关键词检索与线性浏览&#xff0c;面对百页学术论文或跨领域…...

别再Ctrl+F GitHub了!Perplexity高级提示词工程(含18个已验证模板),让开源检索进入“所想即所得”时代

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity GitHub资源检索的范式革命 从关键词匹配到语义理解的跃迁 传统 GitHub 搜索依赖精确的仓库名、文件路径或正则表达式&#xff0c;而 Perplexity 引入的 LLM 驱动检索将自然语言查询&#x…...

深度解构:指纹浏览器底层隔离与Python高并发RPA,如何重塑电商矩阵自动化架构?

大家好&#xff0c;我是林焱&#xff0c;一名专注电商底层业务逻辑与 RPA 自动化架构定制的独立开发者。 在 CSDN 的各个技术板块中&#xff0c;关于爬虫与反爬虫、并发调度、以及客户端架构的讨论一直是热点。而将这些技术综合应用到极致的领域之一&#xff0c;就是当下极度内…...

从零构建现代化前端CLI工具:以martmart-cli为例的工程实践

1. 项目概述&#xff1a;一个为MartMart设计的现代化CLI工具 如果你是一名前端开发者&#xff0c;或者正在参与一个基于现代JavaScript框架&#xff08;比如React、Vue&#xff09;的项目&#xff0c;那么你一定对“脚手架”和“命令行工具”这两个词不陌生。从早期的 create-…...

MooseFS企业级部署方案:多数据中心架构设计与实施指南

MooseFS企业级部署方案&#xff1a;多数据中心架构设计与实施指南 【免费下载链接】moosefs MooseFS Distributed Storage – Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System / Software-Defined Storage 项目地址: h…...