自学内容网 自学内容网

记bean对象之间的转换Orika使用(二)

目录

一、A对象属性值转换到B对象,然后B再转换到A

二、两个对象中的属性名不同的处理方法

三、集合对象映射、对象中包含对象的映射

总结


前言

希望本文能够简洁、易懂、实用的帮助到大家。谢谢!

本编主要接记bean对象之间的转换Orika使用(一)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/u011529483/article/details/142984035?spm=1001.2014.3001.5501文章之后,看看几种实体转换的Orika使用场景。

附:代码在我的readinglist工程中


一、A对象属性值转换到B对象,然后B再转换到A

A,B的bean类延用上一篇文章中的SouBean.java(原bean),DesBean.java(目标bean)。

转换代码如下:

import ma.glasnost.orika.BoundMapperFacade;
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.impl.DefaultMapperFactory;

/**
 * 测试类
 * @author lv
 * @date 2024年10月16日
 */
public class Test {
    public static void main(String[] args) {
        DefaultMapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); //创建MapperFactory对象
        mapperFactory.classMap(SouBean.class, DesBean.class); //classMap(A,B)方法指定类的映射关系,A来源来,B目标类
        MapperFacade mapper = mapperFactory.getMapperFacade(); //getMapperFacade()方法获取一个MapperFacade对象,将源对象转换为目标对象
        SouBean souBean=new SouBean();
        DesBean desBean=mapper.map(souBean, DesBean.class); //map(S,D)方法用于操作对象之间的转换
        System.out.println("获取目标对象的值:"+desBean.getAa001()+"---"+desBean.getAa002());

        // 使用BoundMapperFacade接口的mapReverse方法实现反转映射
        BoundMapperFacade<SouBean, DesBean> boundMapper = mapperFactory.getMapperFacade(SouBean.class, DesBean.class);
        desBean.setAa001("码农--V哥");
        desBean.setAa002("学习spring");
        SouBean souBean2 = boundMapper.mapReverse(desBean); //mapReverse(B b)反转映射
        System.out.println("映射后的值:"+souBean2.getAa001()+"---"+souBean2.getAa002());
    }
}

反转映射部分的代码中使用了BoundMapperFacade接口的mapReverse()方法实现反转映射,我们对desBean对象进行了新赋值,然后映射给SouBean souBean2对象实例。如此便实现了B到A的转换。结果如下图:

那如果两个bean类中的属性名不同怎么做?继续往下看。

二、两个对象中的属性名不同的处理方法

修改SouBean.java(原bean),DesBean.java(目标bean)两个类:

/**
 * 来源bean
 *
 * @author lv
 * @date 2024年10月16日
 */
public class SouBean {
    private String aa001 = "码农V哥";
    private String aa002 = "学习java";
    private String aa003 = "男"; //性别
    private int aa004 = 30; //年龄
    private String aa005 = "A独有";

    public String getAa001() {
        return aa001;
    }

    public void setAa001(String aa001) {
        this.aa001 = aa001;
    }

    public String getAa002() {
        return aa002;
    }

    public void setAa002(String aa002) {
        this.aa002 = aa002;
    }

    public String getAa003() {
        return aa003;
    }

    public void setAa003(String aa003) {
        this.aa003 = aa003;
    }

    public int getAa004() {
        return aa004;
    }

    public void setAa004(int aa004) {
        this.aa004 = aa004;
    }
}
/**
 * 目标bean
 * @author lv
 * @date 2024年10月16日
 */
public class DesBean {
    private String aa001;
    private String aa002;
    private String bb003; //性别
    private int bb004; //年龄
    private String bb005;

    public String getAa001() {
        return aa001;
    }

    public void setAa001(String aa001) {
        this.aa001 = aa001;
    }

    public String getAa002() {
        return aa002;
    }

    public void setAa002(String aa002) {
        this.aa002 = aa002;
    }

    public String getBb003() {
        return bb003;
    }

    public void setBb003(String bb003) {
        this.bb003 = bb003;
    }

    public int getBb004() {
        return bb004;
    }

    public void setBb004(int bb004) {
        this.bb004 = bb004;
    }

    public String getBb005() {
        return bb005;
    }

    public void setBb005(String bb005) {
        this.bb005 = bb005;
    }
}

稍后对性别和年龄字段进行特定绑定映射,aa005不做特定绑定映射。代码如下:

import ma.glasnost.orika.BoundMapperFacade;
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.impl.DefaultMapperFactory;

/**
 * 测试类
 * @author lv
 * @date 2024年10月16日
 */
public class Test {
    public static void main(String[] args) {
        DefaultMapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); //创建MapperFactory对象
        //field方法字段映射、byDefault()方法是映射所有字段使用缺省配置、register()方法是给MapperFactory注册配置信息
        mapperFactory.classMap(SouBean.class, DesBean.class)
                .field("aa003", "bb003").field("aa004", "bb004").byDefault().register();
        MapperFacade mapper = mapperFactory.getMapperFacade(); //getMapperFacade()方法获取一个MapperFacade对象,将源对象转换为目标对象
        SouBean souBean = new SouBean();
        DesBean desBean = mapper.map(souBean, DesBean.class); //map(S,D)方法用于操作对象之间的转换
        System.out.println("获取目标对象的值:" + desBean.getAa001() + "--" + desBean.getAa002() + "--" + desBean.getBb003()
                + "--" + desBean.getBb004() + "--" + desBean.getBb005());
    }
}

代码中使用了field()方法字段映射、byDefault()方法是映射所有字段使用缺省配置、register()方法是给MapperFactory注册配置信息。如果不使用byDefault()方法,那么相同属性名的字段不使用field()方法指定将不会被映射。运行结果如下:

三、集合对象映射、对象中包含对象的映射

新建一个User.java对象类:

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private String uname = "test001"; //用户名
    private String password = "666666"; //密码

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

修改SouBean.java(原bean),DesBean.java(目标bean)两个类:

import java.io.Serializable;

/**
 * 来源bean
 *
 * @author lv
 * @date 2024年10月16日
 */
public class SouBean implements Serializable {
    private static final long serialVersionUID = 1L;

    private String aa001 = "码农V哥";
    private String aa002 = "学习java";
    private String aa003 = "男"; //性别
    private int aa004 = 30; //年龄
    private String aa005 = "A独有";
    private User user; //User.java对象

    /**
     * 构造方法
     * 传入User.java对象的实例
     * @param user
     */
    public SouBean(User user) {
        this.user = user;
    }

    public String getAa001() {
        return aa001;
    }

    public void setAa001(String aa001) {
        this.aa001 = aa001;
    }

    public String getAa002() {
        return aa002;
    }

    public void setAa002(String aa002) {
        this.aa002 = aa002;
    }

    public String getAa003() {
        return aa003;
    }

    public void setAa003(String aa003) {
        this.aa003 = aa003;
    }

    public int getAa004() {
        return aa004;
    }

    public void setAa004(int aa004) {
        this.aa004 = aa004;
    }

    public String getAa005() {
        return aa005;
    }

    public void setAa005(String aa005) {
        this.aa005 = aa005;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
import java.io.Serializable;

/**
 * 目标bean
 * @author lv
 * @date 2024年10月16日
 */
public class DesBean implements Serializable {
    private static final long serialVersionUID = 1L;

    private String aa001;
    private String aa002;
    private String bb003; //性别
    private int bb004; //年龄
    private String bb005;

    private String uname; //用户名
    private String password; //密码

    public String getAa001() {
        return aa001;
    }

    public void setAa001(String aa001) {
        this.aa001 = aa001;
    }

    public String getAa002() {
        return aa002;
    }

    public void setAa002(String aa002) {
        this.aa002 = aa002;
    }

    public String getBb003() {
        return bb003;
    }

    public void setBb003(String bb003) {
        this.bb003 = bb003;
    }

    public int getBb004() {
        return bb004;
    }

    public void setBb004(int bb004) {
        this.bb004 = bb004;
    }

    public String getBb005() {
        return bb005;
    }

    public void setBb005(String bb005) {
        this.bb005 = bb005;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

SouBean.java类中增加User.java对象并生成构造方法、get()、set()方法。

DesBean.java类中增加uname、password属性生,成get()、set()方法。

集合对象映射、对象中包含对象的映射代码如下:

import ma.glasnost.orika.BoundMapperFacade;
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.impl.DefaultMapperFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * 测试类
 * @author lv
 * @date 2024年10月16日
 */
public class Test {
    public static void main(String[] args) {
        SouBean souBean = new SouBean(new User());
        SouBean souBean2 = new SouBean(new User());
        souBean2.setAa001("小V哥'");
        souBean2.setAa002("学习spring");
        souBean2.setAa003("男");
        souBean2.setAa004(22);
        List<SouBean> souBeanList = new ArrayList<>();
        souBeanList.add(souBean);
        souBeanList.add(souBean2);

        DefaultMapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); //创建MapperFactory对象
        mapperFactory.classMap(SouBean.class, DesBean.class)
                .field("aa003", "bb003").field("aa004", "bb004")
                .field("user.uname", "uname").field("user.password", "password").byDefault().register();
        List<DesBean> desBeanList = mapperFactory.getMapperFacade().mapAsList(souBeanList, DesBean.class); //mapAsList方法进行集合转换
        for (DesBean desBean : desBeanList) {
            System.out.println("获取目标对象的值:" + desBean.getAa001() + "--" + desBean.getAa002() + "--" + desBean.getBb003()
                    + "--" + desBean.getBb004() + "--" + desBean.getBb005()+"--"+desBean.getUname()+"--"+desBean.getPassword());
        }
    }
}

代码中创建了两个SouBean类对象的实例,并给属性赋值。然后添加到ArrayList集合中。

使用了mapAsList()方法对集合进行转换。

使用field("user.uname", "uname")写法取对象中包含对象的属性进行映射。

运行结果如下:


总结

BoundMapperFacade接口的mapReverse()方法实现反转映射。
field()方法进行字段映射。

byDefault()方法是映射所有字段使用缺省配置。

如果不使用byDefault()方法,那么相同属性名的字段不使用field()方法指定将不会被映射。

register()方法是给MapperFactory注册配置信息。

使用field("user.uname", "uname")写法取对象中包含对象的属性进行映射。

map()方法对象之间的转换。

mapAsList()方法对集合进行转换。

附:代码在我的readinglist工程中

 


原文地址:https://blog.csdn.net/u011529483/article/details/143001323

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!