MapStruct是用于生成类型安全的bean映射类的Java注解处理器,可以在model和实体类直接进行对象映射,通过注解的方式实现对javaBean的转换
- 注解处理器;
- 可以生成 JavaBean 之间那的映射代码;
- 类型安全, 高性能, 无依赖性;
依赖
org.mapstruct mapstruct-jdk8 1.2.0.Final org.apache.maven.plugins maven-compiler-plugin 3.5.1 ${java.version} ${java.version} org.mapstruct mapstruct-processor 1.2.0.Final -Amapstruct.suppressGeneratorTimestamp=true -Amapstruct.suppressGeneratorVersionInfoComment=true
Student.Class
import javax.persistence.*;
@Entity
@Table(name = "STUDENT")
public class Student {
@Id
@Column(name = "S_ID")
private String sId;
@Basic
@Column(name = "S_NAME")
private String sName;
@Basic
@Column(name = "S_SEX")
private String sSex;
public String getsId() {
return sId;
}
public void setsId(String sId) {
this.sId = sId;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public String getsSex() {
return sSex;
}
public void setsSex(String sSex) {
this.sSex = sSex;
}
@Override
public String toString() {
return "Student{" +
"sId='" + sId + ''' +
", sName='" + sName + ''' +
", sSex='" + sSex + ''' +
'}';
}
}
Uesr.Class
public class Uesr {
private String id;
private String name;
private String sex;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
UesrMapper.Class
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UesrMapper {
UesrMapper INSTANCE = Mappers.getMapper(UesrMapper.class);
@Mappings({
@Mapping(source = "id", target = "sId"),
@Mapping(source = "name", target = "sName", qualifiedByName = "findByName"),
@Mapping(source = "sex", target = "sSex")
})
Student userToStudent(Uesr uesr);
@Named(value = "findByName")
default String findByName(String name){
if (name.equals("zs")){
name = "张三";
}
return name;
}
}
这里需要编译一下,点击maven中的package;会自动生成UesrMapper的实现类UesrMapperImpl;
@Generated(
value = "org.mapstruct.ap.MappingProcessor"
)
public class UesrMapperImpl implements UesrMapper {
@Override
public Student userToStudent(Uesr uesr) {
if ( uesr == null ) {
return null;
}
Student student = new Student();
student.setsSex( uesr.getSex() );
student.setsName( findByName( uesr.getName() ) );
student.setsId( uesr.getId() );
return student;
}
}
测试
import com.demo.sell.test.Student;
import com.demo.sell.test.Uesr;
import com.demo.sell.test.UesrMapper;
import org.junit.Test;
public class UesrTest {
@Test
public void Test(){
Uesr uesr = new Uesr();
uesr.setId("1");
uesr.setName("zs");
uesr.setSex("男");
Student student = UesrMapper.INSTANCE.userToStudent(uesr);
System.out.println(student);
}
}
结果:Student{sId='1', sName='张三', sSex='男'}



