Java Bean对象互相转换
2023-12-21 23:23:18
Maven依赖
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer-spring</artifactId>
<version>5.5.1</version>
</dependency>
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
Resources目录下创建 dozer目录和MATE-INFO
- 目录下创建两个配置文件
bean-mappings.xml
和global-configuration.xml
- bean-mappings.xml
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
</mappings>
- global-configuration.xml
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
<configuration>
<date-format>yyyy-MM-dd HH:mm:ss</date-format>
<wildcard>true</wildcard>
<trim-strings>false</trim-strings>
</configuration>
</mappings>
MATE-INFO下创建spring目录并创建org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件 其内容为 com.shop.config.DozerMapperConfig
创建配置类DozerMapperConfig
package com.system.config;
import org.dozer.spring.DozerBeanMapperFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
@Configuration
public class DozerMapperConfig {
@Bean
public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:dozer/*.xml") Resource[] resources) throws Exception {
DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();
dozerBeanMapperFactoryBean.setMappingFiles(resources);
return dozerBeanMapperFactoryBean;
}
}
创建接口 Generator
/**
* Copyright (C) 2018-2022
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package com.system.common.dozer;
import com.system.entity.base.PagEntity;
import java.util.List;
import java.util.Set;
public interface Generator {
/**
* 转换
*
* @param s 数据对象
* @param clz 复制目标类型
* @return {@link T}
* @Description: 单个对象的深度复制及类型转换,vo/domain , po
* @author banjuer@outlook.com
* @Time 2018年5月9日 下午3:53:24
*/
<T, S> T convert(S s, Class<T> clz);
/**
* @Description: 深度复制结果集(ResultSet为自定义的分页结果集)
* @param s 数据对象
* @param clz 复制目标类型
* @return
* @author banjuer@outlook.com
* @Time 2018年5月9日 下午3:53:24
*/
//<T, S> Result<T> convert(Result<S> s, Class<T> clz);
/**
* 转换
*
* @param s 数据对象
* @param clz 复制目标类型
* @return {@link List<T>}
* @Description: list深度复制
* @author banjuer@outlook.com
* @Time 2018年5月9日 下午3:54:08
*/
<T, S> List<T> convert(List<S> s, Class<T> clz);
/**
* @param s
* @param clz
* @param <T>
* @param <S>
* @return
*/
<T, S> PagEntity<T> convertPaging(PagEntity<S> s, Class<T> clz);
/**
* @param s 数据对象
* @param clz 复制目标类型
* @return
* @Description: set深度复制
* @author banjuer@outlook.com
* @Time 2018年5月9日 下午3:54:39
*/
<T, S> Set<T> convert(Set<S> s, Class<T> clz);
/**
* @param s 数据对象
* @param clz 复制目标类型
* @return
* @Description: 数组深度复制
* @author banjuer@outlook.com
* @Time 2018年5月9日 下午3:54:57
*/
<T, S> T[] convert(S[] s, Class<T> clz);
}
创建Generator 接口的实现类GeneratorImpl
/**
* Copyright (C) 2018-2022
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package com.system.common.dozer;
import com.system.entity.base.PagEntity;
import org.dozer.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.lang.reflect.Array;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Component
@Lazy(true)
public class GeneratorImpl implements Generator {
@Autowired
protected Mapper dozerMapper;
@Override
public <T, S> T convert(S s, Class<T> clz) {
return s == null ? null : dozerMapper.map(s, clz);
}
@Override
public <T, S> List<T> convert(List<S> s, Class<T> clz) {
return s == null ? null : s.stream().map(vs -> dozerMapper.map(vs, clz)).collect(Collectors.toList());
}
@Override
public <T, S> PagEntity<T> convertPaging(PagEntity<S> paging, Class<T> clz) {
PagEntity<T> pagingVo = new PagEntity<>();
pagingVo.setRecords(convert(paging.getRecords(), clz));
pagingVo.setTotal(paging.getTotal());
return pagingVo;
}
@Override
public <T, S> Set<T> convert(Set<S> s, Class<T> clz) {
return s == null ? null : s.stream().map(vs -> dozerMapper.map(vs, clz)).collect(Collectors.toSet());
}
@Override
public <T, S> T[] convert(S[] s, Class<T> clz) {
if (s == null) {
return null;
}
@SuppressWarnings("unchecked")
T[] arr = (T[]) Array.newInstance(clz, s.length);
for (int i = 0; i < s.length; i++) {
arr[i] = dozerMapper.map(s[i], clz);
}
return arr;
}
}
使用其进行实体类转换
@Resource
private Generator generator;
public Long addBanner(BannerVo banner) throws ServerExcption {
Banner convert = generator.convert(banner, Banner.class);
convert.setType(0);
Date date = new Date();
convert.setCreateTime(date);
convert.setUpdateTime(date);
bannerMapper.insert(convert);
return convert.getId();
}
至此完成
文章来源:https://blog.csdn.net/qq_45834006/article/details/135140464
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!