公司做网站需要注意些什么问题,个人网站空间大小,平顶山做网站公司,咨询公司英文MapStruct从0到0.5
开发的过程#xff0c;经常会用到实体类属性映射#xff0c;同时为了方便#xff0c;开发者也很少自己写专门的属性赋值工具类。索性会直接使用Sprrng提供的BeanUtils工具类#xff0c;然后在性能上和字段属性赋值上的问题#xff0c;一直是为开发者所…MapStruct从0到0.5
开发的过程经常会用到实体类属性映射同时为了方便开发者也很少自己写专门的属性赋值工具类。索性会直接使用Sprrng提供的BeanUtils工具类然后在性能上和字段属性赋值上的问题一直是为开发者所诟病的下面直接上案例。
1、引入依赖 注意lombok引入一定要在mapstruct依赖的前面。否则会出现无法找到Setter和Getter方法的异常出现。 dependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency!-- mapstruct --dependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct-jdk8/artifactIdversion1.5.3.Final/version/dependencydependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct-processor/artifactIdversion1.5.3.Final/version/dependencydependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct/artifactIdversion1.5.3.Final/version/dependency
/dependencies2、编写案例
引入依赖后则进行日常较为常用的案例测试首先附上基础代码 User.java
Data
public class User {private Long id;/*** 情况一时间字符串转时间对象*/private String birthDay;/*** 时间字符串转时间对象*/private Date happenDay;/*** 情况二使用工具类指定方法进行处理字段*/private String ids;/*** 情况三忽略字段*/private String ignore;/*** 情况四字段对应*/private String label;
}UserVo.java
Data
public class UserVo {private Long id;/*** 情况一时间字符串转时间对象*/private Date birthDay;/*** 时间对象转时间字符串*/private String happenDay;/*** 情况二使用工具类指定方法进行处理字段*/private ListString ids;/*** 情况三忽略字段*/private String ignore;/*** 情况四字段对应*/private String value;
} **注意**这里的Mapper注解在mapstruct包下别与myBatis中的注解混淆。 UserMapper.java
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;Mapper
public interface UserMapper {UserMapper INSTANCE Mappers.getMapper(UserMapper.class);Mapping(target birthDay, dateFormat yyyy-MM-dd)Mapping(target happenDay, dateFormat yyyy-MM-dd)Mapping(source label, target value)Mapping(target ignore, ignore true)Mapping(target ids, expression java(ConverterUtil.strToList(user.getIds())))UserVo UserToUserVo(User user);
}ConverterUtil.java
public class ConverterUtil {public static ListString strToList(String str){return Arrays.asList(str.split(,));}
}
MapStructTest.java
public class MapStructTest {public static void main(String[] args) {// 1、创造属性User user new User();user.setId(1L);user.setBirthDay(2023-08-29);user.setHappenDay(new Date());user.setIds(11,22,33);user.setIgnore(这是一个忽略字段);user.setLabel(将label映射到value上);// 2、测试效果UserVo userVo UserMapper.INSTANCE.UserToUserVo(user);System.out.println(userVo);}
}下面打印显示结果
UserVo(id1, birthDayTue Aug 29 00:00:00 CST 2023, happenDay2023-09-09,
ids[11, 22, 33], ignorenull, value将label映射到value上)Process finished with exit code 03、详细说明
1、Mapping和Mappings
Mapping(target birthDay, dateFormat yyyy-MM-dd)
Mapping(target happenDay, dateFormat yyyy-MM-dd)
Mapping(source label, target value)
Mapping(target ignore, ignore true)
Mapping(target ids, expression java(ConverterUtil.strToList(user.getIds())))
UserVo UserToUserVo(User user);上文中多个Mapping也可以替换为Mapings写法
Mappings({Mapping(target birthDay, dateFormat yyyy-MM-dd),Mapping(target happenDay, dateFormat yyyy-MM-dd),Mapping(source label, target value),Mapping(target ignore, ignore true),Mapping(target ids, expression java(ConverterUtil.strToList(user.getIds())))})
UserVo UserToUserVo(User user);2、dateFormat 时间类型Date.class和字符串的相互转换
无论是时间字符串转时间对象还是时间对象转时间字符串都需要补充转换的时间格式
// birthDay有 string 转 date
Mapping(target birthDay, dateFormat yyyy-MM-dd)
// happenDay有 date 转 string
Mapping(target happenDay, dateFormat yyyy-MM-dd)3、ignore 字段忽略
// boolean ignore() default false;
Mapping(target ignore, ignore true)4、编写Java方法表达式使用自定义工具类进行字段值转变
ConverterUtil .class工具类
public class ConverterUtil {public static ListString strToList(String str){return Arrays.asList(str.split(,));}
}使用格式
Mapping(target ids, expression java(ConverterUtil.strToList(user.getIds())))
UserVo UserToUserVo(User user);5、字段映射
// User的label 映射到 UserVo的value
Mapping(source label, target value)
UserVo UserToUserVo(User user);6、设置属性为常量或者默认值
// 设置常量
Mapping(source id, target id, constant -1L)
UserVo UserToUserVo(User user);// 设置默认值
Mapping(source id, target id, defaultValue 1024L)
UserVo UserToUserVo(User user);4、后续
以上就是笔者目前在项目所用的一些记实如果想了解更多笔者找到一份比较详细的文章用来参考 MapStruct之Mapping注解的用法 官方文档