MapStruct入门案例

概述

现代软件开发基本都基于分层架构下进行的,而在分层结构下,不同的层会有不同的bean,由于业务需要不同的bean在不同的层中其方法和命名总不能同时保持一致,在不同的层中会涉及到不同bean的转换,如果每次都用set/get方法,总会显得繁琐,而MapStruct框架就为解决不同bean之间的转换提供了很好的解决方案,使用MapStruct可以轻松的在不同bean之间转换

案例

转换接口,只需要简单的配置,引入@Mapper注解,配置source和target,就可以将Student的name属性映射到StudentDTO中的studentname属性了

@Mapper
public interface StudentConverter {

    StudentConverter INSTANCE = Mappers.getMapper(StudentConverter.class);

    @Mappings(@Mapping(source = "sname", target = "studentname"))
    StudentDTO do2dto(Student student);

}

在这里插入图片描述

测试

在这里插入图片描述
可以看到我们完成了映射

源类: Student

@TableName("STUDENT")
public class Student implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 学号
     */
    @TableId("SID")
    private String sid;

    /**
     * 姓名
     */
    @TableField("SNAME")
    private String sname;

    /**
     * 年级
     */
    @TableField("SGRADE")
    private String sgrade;

    /**
     * 班级
     */
    @TableField("SCLASS")
    private String sclass;

    @TableField("COUNT_TIME")
    private LocalDateTime countTime;

    @TableField("PIC_PATH")
    private String picPath;
    

    public void setSid(String sid) {
        this.sid = sid;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public void setSgrade(String sgrade) {
        this.sgrade = sgrade;
    }

    public void setSclass(String sclass) {
        this.sclass = sclass;
    }

    public void setCountTime(LocalDateTime countTime) {
        this.countTime = countTime;
    }

    public void setPicPath(String picPath) {
        this.picPath = picPath;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getSid() {
        return sid;
    }

    public String getSname() {
        return sname;
    }

    public String getSgrade() {
        return sgrade;
    }

    public String getSclass() {
        return sclass;
    }

    public LocalDateTime getCountTime() {
        return countTime;
    }

    public String getPicPath() {
        return picPath;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid='" + sid + '\'' +
                ", sname='" + sname + '\'' +
                ", sgrade='" + sgrade + '\'' +
                ", sclass='" + sclass + '\'' +
                ", countTime=" + countTime +
                ", picPath='" + picPath + '\'' +
                '}';
    }
}

转换类 StudentDTO

public class StudentDTO {

    /**
     * 学号
     */
    @TableId("SID")
    private String sid;

    /**
     * 姓名
     */
    @TableField("SNAME")
    private String studentname;

    /**
     * 年级
     */
    @TableField("SGRADE")
    private String sgrade;

    /**
     * 班级
     */
    @TableField("SCLASS")
    private String sclass;

    @TableField("COUNT_TIME")
    private LocalDateTime countTime;

    @TableField("PIC_PATH")
    private String picPath;

    public void setSid(String sid) {
        this.sid = sid;
    }

    public void setStudentname(String studentname) {
        this.studentname = studentname;
    }

    public void setSgrade(String sgrade) {
        this.sgrade = sgrade;
    }

    public void setSclass(String sclass) {
        this.sclass = sclass;
    }

    public void setCountTime(LocalDateTime countTime) {
        this.countTime = countTime;
    }

    public void setPicPath(String picPath) {
        this.picPath = picPath;
    }

    public String getSid() {
        return sid;
    }

    public String getStudentname() {
        return studentname;
    }

    public String getSgrade() {
        return sgrade;
    }

    public String getSclass() {
        return sclass;
    }

    public LocalDateTime getCountTime() {
        return countTime;
    }

    public String getPicPath() {
        return picPath;
    }

    @Override
    public String toString() {
        return "StudentDTO{" +
                "sid='" + sid + '\'' +
                ", studentname='" + studentname + '\'' +
                ", sgrade='" + sgrade + '\'' +
                ", sclass='" + sclass + '\'' +
                ", countTime=" + countTime +
                ", picPath='" + picPath + '\'' +
                '}';
    }
}
<dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.3.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <version>1.3.1.Final</version>
        </dependency>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source> <!-- depending on your project -->
                    <target>1.8</target> <!-- depending on your project -->
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.3.1.Final</version>
                        </path>
                        <!-- other annotation processors -->
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值