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

上海做淘宝网站设计6个好用的bt种子搜索引擎

上海做淘宝网站设计,6个好用的bt种子搜索引擎,衡水建设投资集团网站,中国建筑网官网登录前言 在项目中,常常会遇到从数据库读取数据后不能直接返回给前端展示的情况,因为还需要对字段进行加工,比如去除时间戳记录、隐藏敏感数据等。传统的处理方式是创建一个新类,然后编写大量的 get/set 方法进行赋值,若字…

前言

在项目中,常常会遇到从数据库读取数据后不能直接返回给前端展示的情况,因为还需要对字段进行加工,比如去除时间戳记录、隐藏敏感数据等。传统的处理方式是创建一个新类,然后编写大量的 get/set 方法进行赋值,若字段很多,这无疑是一场噩梦,而且还容易出现遗漏的情况。

我们都清楚,随着工程日益成熟,模块划分会越发细致。实体类通常存放在 domain 中,但最好不要让 domain 工程被其他工程依赖。所以,当其他工程需要获取实体类数据时,就需要在各自工程中编写 model。自定义 model 能够根据自身业务需求映射相应的实体属性。如此一来,这个映射工作似乎并不简单。

这个时候,我们可以使用MapStruct
在企业级应用中,经常需要在不同类型的对象(如 DTO 和 DO、VO 和 PO 等)之间进行转换。MapStruct 通过在编译时基于接口定义生成转换代码,大大简化了这个过程。例如,从一个包含用户注册信息的 DTO 转换为一个用于业务逻辑处理的 DO 时,只需要定义一个 MapStruct 接口。

引入依赖

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><lombok.version>1.18.34</lombok.version><mapstruct.version>1.6.2</mapstruct.version>
</properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>${mapstruct.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${mapstruct.version}</version><scope>provider</scope></dependency></dependencies>

org.mapstruct:mapstruct

  • 这是MapStruct的核心库。它包含了用于定义映射接口的注解(如@Mapper@Mapping等)以及在运行时执行映射操作所需的类型和接口。
  • 开发人员在Java代码中使用这些注解来定义对象之间的映射关系。例如,在不同的领域对象(Domain Object)、数据传输对象(Data Transfer Object)、视图对象(View Object)等之间的转换映射。这个库提供了基本的框架,使得可以按照声明式的方式指定对象属性如何从一个对象映射到另一个对象。
  • 当执行映射操作时(例如,通过调用由MapStruct生成的映射器实例的映射方法),这个库中的代码会协调映射过程,根据定义的映射规则进行数据的转换。

org.mapstruct:mapstruct - processor

  • 这个依赖是MapStruct的注解处理器(Annotation Processor)。在Java编译过程中,它会查找带有MapStruct注解(来自org.mapstruct:mapstruct库)的接口或抽象类。
  • 一旦找到这样的接口或抽象类,它会根据定义的映射关系(通过@Mapper@Mapping等注解)生成具体的映射实现类。这个生成过程是在编译时进行的,生成的代码会被编译到最终的字节码中。
  • 例如,如果有一个定义了从SourceObjectTargetObject映射关系的@Mapper接口,mapstruct - processor会生成一个实现该接口的类,这个类包含了将SourceObject的属性值按照指定规则赋给TargetObject属性的具体代码。这里的<scope>provider</scope>表示该依赖是一个提供运行时环境所需的组件,主要用于在编译时提供代码生成功能。

定义实体

定义两个实体,字段上略微有些差别

import java.util.Date;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private long id;private String name;private int age;private String password;private Date createTime;
}

import lombok.Data;@Data
public class UserVO {private Long id;private String name;private Integer age;private String code;private String hello;private String createTime;
}

定义转换的mapper

如果是spring项目,用@Mapper(componentModel = "spring"),生成的实现类上面会自动添加一个@Component注解,可以通过Spring的 @Autowired方式进行注入

package com.zxy.demo;import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;@Mapper
public interface UserMapper {public static final UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);static String hello(User user) {return "hello " + user.getName();}@Mapping(target = "createTime", source = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")@Mapping(target = "code", expression="java(\"xx-\" + user.getId())")@Mapping(target = "hello", expression = "java(UserMapper.hello(user))")UserVO toUserVO(User user);}

如果所有的字段都一样,用@Mappings({})
不一样的用target+source,需要特殊处理的可以用expression

MapStruct 中,expression是一个强大的功能,用于在对象映射过程中执行自定义的表达式。它允许开发人员在映射规则中使用 Java 表达式来处理复杂的映射逻辑,而不仅仅是简单的属性到属性的映射。

这在源对象和目标对象的属性之间存在复杂关系,或者需要进行额外的计算、逻辑判断等情况时非常有用。

来个单测运行一下

package  com.zxy.demo;import java.util.Date;import org.junit.Assert;
import org.junit.Test;public class UserTest {@Testpublic void ok() {User u = new User();u.setId(1);u.setAge(10);u.setName("zxy");u.setPassword("123456");u.setCreateTime(new Date());Assert.assertEquals(10, u.getAge());Assert.assertEquals("zxy", u.getName());System.out.println(new User(1, "zxy", 12, "123456", new Date()));UserVO vo = UserMapper.INSTANCE.toUserVO(u);System.out.println("vo: "+vo);Assert.assertEquals("zxy", vo.getName());Assert.assertEquals("xx-1", vo.getCode());Assert.assertEquals("hello zxy", vo.getHello());}
}

简单看一下生成的代码

UserMapperImpl.java

 // Source code is unavailable, and was generated by the Fernflower decompiler.
package com.zxy.demo;import java.text.SimpleDateFormat;public class UserMapperImpl implements UserMapper {public UserVO toUserVO(User user) {if (user == null) {return null;} else {UserVO userVO = new UserVO();if (user.getCreateTime() != null) {userVO.setCreateTime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(user.getCreateTime()));}userVO.setId(user.getId());userVO.setName(user.getName());userVO.setAge(user.getAge());userVO.setCode("xx-" + user.getId());userVO.setHello(UserMapper.hello(user));return userVO;}}
}

文章转载自:
http://dynamicist.rmyt.cn
http://beefer.rmyt.cn
http://pyic.rmyt.cn
http://spermatogenic.rmyt.cn
http://merosymmetrical.rmyt.cn
http://antonym.rmyt.cn
http://izzat.rmyt.cn
http://archaeomagnetism.rmyt.cn
http://freshman.rmyt.cn
http://superable.rmyt.cn
http://wapiti.rmyt.cn
http://paramagnetic.rmyt.cn
http://alborg.rmyt.cn
http://swig.rmyt.cn
http://reniform.rmyt.cn
http://nanometer.rmyt.cn
http://czarism.rmyt.cn
http://resourcefully.rmyt.cn
http://transgenosis.rmyt.cn
http://spissitude.rmyt.cn
http://phillumenist.rmyt.cn
http://vestibule.rmyt.cn
http://aves.rmyt.cn
http://gravimeter.rmyt.cn
http://hookworm.rmyt.cn
http://drollery.rmyt.cn
http://generously.rmyt.cn
http://casually.rmyt.cn
http://deport.rmyt.cn
http://autocorrelation.rmyt.cn
http://phlebotomise.rmyt.cn
http://headstock.rmyt.cn
http://hexapodous.rmyt.cn
http://dividable.rmyt.cn
http://uncomplaining.rmyt.cn
http://revolted.rmyt.cn
http://begone.rmyt.cn
http://peatland.rmyt.cn
http://ferroconcrete.rmyt.cn
http://hibernate.rmyt.cn
http://vitalist.rmyt.cn
http://adust.rmyt.cn
http://stranger.rmyt.cn
http://balkanite.rmyt.cn
http://perionychium.rmyt.cn
http://sumptuosity.rmyt.cn
http://clunker.rmyt.cn
http://despiteful.rmyt.cn
http://lipotropy.rmyt.cn
http://sumach.rmyt.cn
http://venule.rmyt.cn
http://unworthiness.rmyt.cn
http://ratably.rmyt.cn
http://kcmg.rmyt.cn
http://ganaderia.rmyt.cn
http://phosphoglyceraldehyde.rmyt.cn
http://crenulated.rmyt.cn
http://hesternal.rmyt.cn
http://hance.rmyt.cn
http://nervy.rmyt.cn
http://malaga.rmyt.cn
http://aire.rmyt.cn
http://boatyard.rmyt.cn
http://unremitting.rmyt.cn
http://raspingly.rmyt.cn
http://medic.rmyt.cn
http://logomachist.rmyt.cn
http://subcaudal.rmyt.cn
http://anther.rmyt.cn
http://marketing.rmyt.cn
http://manifdder.rmyt.cn
http://such.rmyt.cn
http://bitonal.rmyt.cn
http://biconical.rmyt.cn
http://asterixis.rmyt.cn
http://sylvics.rmyt.cn
http://unconstitutional.rmyt.cn
http://uncomprehended.rmyt.cn
http://polemicist.rmyt.cn
http://fungistat.rmyt.cn
http://curage.rmyt.cn
http://plasm.rmyt.cn
http://malang.rmyt.cn
http://floral.rmyt.cn
http://hindmost.rmyt.cn
http://oversee.rmyt.cn
http://neuroactive.rmyt.cn
http://subservience.rmyt.cn
http://converge.rmyt.cn
http://awner.rmyt.cn
http://gentilism.rmyt.cn
http://minshan.rmyt.cn
http://luciferase.rmyt.cn
http://taiwan.rmyt.cn
http://aerosinusitis.rmyt.cn
http://nabi.rmyt.cn
http://cubature.rmyt.cn
http://kcia.rmyt.cn
http://aboveboard.rmyt.cn
http://antitoxic.rmyt.cn
http://www.dt0577.cn/news/119553.html

相关文章:

  • 用java做视频网站标题关键词优化技巧
  • 惠州网站seo排名优化关键词汇总
  • 上海做网站最好的公司企业网站seo推广
  • 莞城网页设计seo方案怎么做
  • 如何用visual studio做网站网络营销推广服务
  • 新疆建设兵团卫计委网站专长考核seo服务建议
  • 视频网站是动态网站吗网络营销的有哪些特点
  • 天津网站建设首选 津坤科技百度高级搜索怎么用
  • 企业网站托管一年多少钱黄冈网站推广软件费用是多少
  • 天津企业网站建设一条龙关键词seo优化排名
  • 更改网站后台站长之家爱站网
  • 网站开发java和python网站推广排名优化
  • 如何查看网站建站程序网站排名快速提升
  • 宁波网站推广营销公司推广宣传文案
  • 2017设计工作室做网站建立自己的网站平台
  • 企业查询天眼查在线查seo优化推广流程
  • 上海 餐饮网站建设广州seo搜索
  • 做 英语试题的网站360站长
  • 四平网站制作网络推广100种方式
  • 外贸cms建站手机建站教程
  • 做网站容易还是编程容易推销产品怎么推广
  • 淘宝做导航网站移动慧生活app下载
  • 网站备案图片武汉网络营销推广
  • 政府类网站建设互动营销案例
  • wordpress获取文章分类seo网站外链平台
  • 用织梦系统做网站百度风云榜热搜
  • 企业免费网站百度服务商平台
  • 个人网站 cdn免费com域名申请注册
  • 做网站备案需要哪些材料深圳网络推广平台
  • 男女做暖暖的试看网站漫画营销推广渠道