教程 > mapstruct 教程 > 阅读:659

mapstruct 使用自定义映射器 mapper——迹忆客-ag捕鱼王app官网

mapstruct 映射器允许创建自定义映射器方法来映射对象。 对于映射器接口,我们可以添加一个默认方法。

语法

@mapper(uses=datemapper.class)
public interface utilitymapper {
   default car getcar(carentity entity) {
      car car = new car();
      car.setid(entity.getid());
      car.setname(entity.getname());
      return car;
   }
}

示例

mapping enum 章节中更新的打开项目映射。

使用以下代码更新 utilitymapper.java

utilitymapper.java

package com.jiyik.mapper;
import com.jiyik.entity.carentity;
import com.jiyik.enums.ordertype;
import com.jiyik.enums.placedordertype;
import com.jiyik.model.car;
import org.mapstruct.mapmapping;
import org.mapstruct.mapper;
import org.mapstruct.valuemapping;
import java.text.parseexception;
import java.text.simpledateformat;
import java.util.date;
import java.util.gregoriancalendar;
import java.util.map;
import java.util.stream.stream;
@mapper(uses=datemapper.class)
public interface utilitymapper {
    @mapmapping(valuedateformat = "dd.mm.yyyy")
    map getmap(map source);
    stream getstream(stream source);
    @valuemapping(source = "extra", target = "special")
    placedordertype getenum(ordertype order);
    carentity getcarentity(car car) throws parseexception;
    default car getcar(carentity entity) {
        car car = new car();
        car.setid(entity.getid());
        car.setname(entity.getname());
        return car;
    }
}
class datemapper {
    public string asstring(gregoriancalendar date) {
        return date != null ? new simpledateformat( "yyyy-mm-dd" )
                .format( date.gettime() ) : null;
    }
    public gregoriancalendar asdate(string date) throws parseexception {
        date date1 = date != null ? new simpledateformat( "yyyy-mm-dd" )
                .parse( date ) : null;
        if(date1 != null) {
            return new gregoriancalendar(date1.getyear(), date1.getmonth(),date1.getday());
        }
        return null;
    }
}

使用以下代码更新 utilitymappertest.java

utilitymappertest.java

import com.jiyik.entity.carentity;
import com.jiyik.enums.ordertype;
import com.jiyik.enums.placedordertype;
import com.jiyik.mapper.utilitymapper;
import com.jiyik.model.car;
import org.junit.test;
import org.mapstruct.factory.mappers;
import java.text.parseexception;
import java.util.arrays;
import java.util.gregoriancalendar;
import java.util.hashmap;
import java.util.map;
import java.util.stream.stream;
import static org.junit.assert.assertequals;
import static org.junit.assert.asserttrue;
public class utilitymappertest {
    private utilitymapper utilitymapper = mappers.getmapper(utilitymapper.class);
    @test
    public void testmapmapping() {
        map source = new hashmap<>();
        source.put(1l, new gregoriancalendar(2015, 3, 5));
        map target = utilitymapper.getmap(source);
        assertequals("2015-04-05", target.get("1"));
    }
    @test
    public void testgetstream() {
        stream numbers = arrays.aslist(1, 2, 3, 4).stream();
        stream strings = utilitymapper.getstream(numbers);
        assertequals(4, strings.count());
    }
    @test
    public void testgetenum() {
        placedordertype placedordertype = utilitymapper.getenum(ordertype.extra);
        placedordertype placedordertype1 = utilitymapper.getenum(ordertype.normal);
        placedordertype placedordertype2 = utilitymapper.getenum(ordertype.standard);
        assertequals(placedordertype.special.name(), placedordertype.name());
        assertequals(placedordertype.normal.name(), placedordertype1.name());
        assertequals(placedordertype.standard.name(), placedordertype2.name());
    }
    @test
    public void testgetcarentity() {
        car car = new car();
        car.setid(1);
        car.setmanufacturingdate("11/10/2020");
        boolean exceptionoccured = false;
        try {
            carentity carentity = utilitymapper.getcarentity(car);
        } catch (parseexception e) {
            exceptionoccured = true;
        }
        asserttrue(exceptionoccured);
    }
    @test
    public void testgetcar() {
        carentity entity = new carentity();
        entity.setid(1);
        entity.setname("zen");
        car car = utilitymapper.getcar(entity);
        assertequals(entity.getid(), car.getid());
        assertequals(entity.getname(), car.getname());
    }
}

运行以下命令来测试映射。

$ mvn clean test

执行结果如下

mapstruct 自定义映射器

查看笔记

扫码一下
查看教程更方便
网站地图