添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接


场景

Java中使用MapStruct实现对象转换/实体属性赋值/Bean属性映射,避免大量setter和getter:

​​Java中使用MapStruct实现对象转换/实体属性赋值/Bean属性映射,避免大量setter和getter_霸道流氓气质的博客

上面介绍了mapstruct的简单使用,某些场景下需要自定义转换规则,比如记录时间字段默认获取

当前时间、某个属性需要根据两个属性的判定关系转换。

注:

博客:​霸道流氓气质的博客_-C#,架构之路,SpringBoot领域博主​​

实现

1、这是可以通过@Mapping的expression来进行设置。

比如设置某个字段为获取当前时间。

@Mapping(target = "recordTime",expression = "java(new java.util.Date())")

注意这里的new Date,必须是全路径的,不能直接写new Date()

2、如果逻辑较复杂,需要对转换前的实体的多个属性进行逻辑判断,甚至可以

在expression中写明执行某个函数,将实体类作为参数传递。

@Mapping(target = "lastLoginTime",expression = "java(DriverNoLoginConvert.getLastLoginTime(busMailList))")

这里转换接口类就叫DriverNoLoginConvert,然后getLastLoginTime是其静态方法,方法实现如下

static Date  getLastLoginTime(BusMailList busMailList){
return null == busMailList.getBindingTime()?busMailList.getUpdateTime():busMailList.getBindingTime();
}

这里的转换规则就是,实体的bindingTime不为空,则用该字段进行转换,如果为空,则用updateTime字段

进行转换。

3、完整的转换接口类实例

import com.ruoyi.common.core.domain.basicinfomanage.BusMailList;
import com.ruoyi.common.core.domain.reportmanagement.BusDriverNoLoginRecord;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.Date;

@Mapper
public interface DriverNoLoginConvert {
DriverNoLoginConvert INSTANCE = Mappers.getMapper(DriverNoLoginConvert.class);

@Mappings({
@Mapping(source = "carNumber",target = "carNum"),
@Mapping(source = "driverNumber",target = "lastLoginNumber"),
@Mapping(target = "id",ignore = true),
@Mapping(target = "lastLoginTime",expression = "java(DriverNoLoginConvert.getLastLoginTime(busMailList))"),
@Mapping(target = "recordTime",expression = "java(new java.util.Date())")
})
BusDriverNoLoginRecord mailList2NoLoginRecord(BusMailList busMailList);

static Date getLastLoginTime(BusMailList busMailList){
return null == busMailList.getBindingTime()?busMailList.getUpdateTime():busMailList.getBindingTime();
}
}
java交互fms Java交互变量

摘要:   利用Java实现交换两个变量的三种方式:   (1)借助临时变量   (2)不借助第三变量,通过加减方式(可能会有溢出风险)   (3)通过异或运算package com.gx.demo; public class ExchangeTwoVariable { public static void main(String[] args) { exchangeByThirdVar(