扫码一下
查看教程更方便
mapstruct 无缝地处理嵌套映射。 例如,将 subject 用作嵌套 bean 的 student。
现在创建一个可以映射嵌套对象的映射器接口。
@mapper
public interface studentmapper {
@mapping(target="classname", source="classval")
@mapping(target="subject", source="subject.name")
student getmodelfromentity(studententity studententity);
@mapping(target="classval", source="classname")
@mapping(target="subject.name", source="subject")
studententity getentityfrommodel(student student);
}
打开映射多个对象章节中更新的项目映射。
使用以下代码创建 subjectentity.java
subjectentity.java
package com.jiyik.entity; public class subjectentity { private string name; public string getname() { return name; } public void setname(string name) { this.name = name; } }
使用以下代码更新 studententity.java
studententity.java
package com.jiyik.entity; public class studententity { private int id; private string name; private string classval; private subjectentity subject; public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getclassval() { return classval; } public void setclassval(string classval) { this.classval = classval; } public subjectentity getsubject() { return subject; } public void setsubject(subjectentity subject) { this.subject = subject; } }
使用以下代码更新 student.java
student.java
package com.jiyik.model; public class student { private int id; private string name; private string classname; private string subject; public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getclassname() { return classname; } public void setclassname(string classname) { this.classname = classname; } public string getsubject() { return subject; } public void setsubject(string subject) { this.subject = subject; } }
使用以下代码更新 studentmapper.java
studentmapper.java
package com.jiyik.mapper; import com.jiyik.entity.studententity; import com.jiyik.model.student; import org.mapstruct.mapper; import org.mapstruct.mapping; @mapper public interface studentmapper { @mapping(target="classname", source="classval") @mapping(target="subject", source="subject.name") student getmodelfromentity(studententity studententity); @mapping(target="classval", source="classname") @mapping(target="subject.name", source="subject") studententity getentityfrommodel(student student); }
使用以下代码更新 studentmappertest.java
studentmappertest.java
import com.jiyik.entity.studententity; import com.jiyik.entity.subjectentity; import com.jiyik.mapper.studentmapper; import com.jiyik.model.student; import org.junit.test; import org.mapstruct.factory.mappers; import static org.junit.assert.assertequals; public class studentmappertest { private studentmapper studentmapper = mappers.getmapper(studentmapper.class); @test public void testentitytomodel() { studententity entity = new studententity(); entity.setclassval("x"); entity.setname("john"); entity.setid(1); subjectentity subject = new subjectentity(); subject.setname("computer"); entity.setsubject(subject); student model = studentmapper.getmodelfromentity(entity); assertequals(entity.getclassval(), model.getclassname()); assertequals(entity.getname(), model.getname()); assertequals(entity.getid(), model.getid()); assertequals(entity.getsubject().getname(), model.getsubject()); } @test public void testmodeltoentity() { student model = new student(); model.setid(1); model.setname("john"); model.setclassname("x"); model.setsubject("science"); studententity entity = studentmapper.getentityfrommodel(model); assertequals(entity.getclassval(), model.getclassname()); assertequals(entity.getname(), model.getname()); assertequals(entity.getid(), model.getid()); assertequals(entity.getsubject().getname(), model.getsubject()); } }
运行以下命令来测试映射。
$ mvn clean test
执行结果如下