代码拉取完成,页面将自动刷新
看例子就像是一个序列化和反序列化的过程,或者通过反射也可以解决,一些开源的BeanUtil或者自己写一个JSON的序列化和反序列化也可以搞定
当你想知道某个属性在哪里被设置值时就会用上了
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
和lombok有没有冲突? 下列代码编译不了
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.didispace</groupId>
<artifactId>chapter3-6</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>使用MyBatis(xml配置方式)</description>
<properties>
<java.version>1.8</java.version>
<mapstruct-plus.version>1.1.3</mapstruct-plus.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!--
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Final</version>
<scope>provided</scope>
</dependency>
-->
<dependency>
<groupId>io.github.linpeilie</groupId>
<artifactId>mapstruct-plus-spring-boot-starter</artifactId>
<version>${mapstruct-plus.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>io.github.linpeilie</groupId>
<artifactId>mapstruct-plus-processor</artifactId>
<version>${mapstruct-plus.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String sex;
private LocalDateTime createdAt;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
当你问出这个问题的时候,就知道你没有使用过MapStruct,这个项目的目的是为了让MapStruct更易用(MapStruct的配置比较繁琐)。
BeanUtil确实也可以实现bean copy,但是是在运行时层面的,假设我有100个对象甚至更多需要copy那它就需要跑100遍甚至更多的反射,反射本来就是需要ClassLoader介入的,本来性能就很慢,更别说copy大量的Bean list,并且在JDK17之后,引入了一些反射相关的限制,简而言之就是收紧了使用者使用反射的一些权限。JSON序列化就懒得说了,根本不是一个东西,你以为序列化是什么轻量级的东西吗?
MapStruct的原理其实就是帮你生成了调用复制的 getter 和 setter 方法:
public UserVo convertToVo(User user){
UserVo vo = new UserVo();
vo.setUserId(user.getUserId);
vo.setUserName(user.getUserName);
// ...
return vo;
}
哪个性能更好你自己判断。
知道即学到,谁都是从小白开始的。
登录 后才可以发表评论