记bean对象之间的转换Orika使用(二)
目录
希望本文能够简洁、易懂、实用的帮助到大家。谢谢!
本编主要接记bean对象之间的转换Orika使用(一)-CSDN博客https://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)!