dozer是实体类与实体类之间转换的工具,下面是简单操作配置
引入依赖:
<!--dozer 实体类转换工具--><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>
首先是dozer的配置,写配置类
import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Arrays;/*** @author zxy* @Classname DozerMapperConfig* @Date 2022/3/29 16:10*/
@Configuration
public class DozerMapperConfig {@Bean(name = "org.dozer.Mapper")public Mapper mapper(){DozerBeanMapper mapper = new DozerBeanMapper();//如果要读取多个或者一个xml文件,则将写进下面地址,如果不需要xml配置则不用。// mapper.setMappingFiles(Arrays.asList("dozer/dozer-mapping.xml","dozer/xxx.xml"));return mapper;}
}
接下来封装一下转换工具
import org.dozer.DozerBeanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.dozer.Mapper;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/*** @author zxy* @Classname GeneralConvertor* @Date 2022/3/29 15:21*/
@Component
public class GeneralConvertor {@ResourceMapper mapper;/*** List 实体类 转换器* @return*/public <T, S> List<T> convertor(List<S> source, Class<T> clz) {if (source == null) return null;List<T> map = new ArrayList<>();for (S s : source) {map.add(mapper.map(s, clz));}return map;}/*** Set 实体类 深度转换器* @return*/public <T, S> Set<T> convertor(Set<S> source, Class<T> clz) {if (source == null) return null;Set<T> set = new TreeSet<>();for (S s : source) {set.add(mapper.map(s, clz));}return set;}/*** 实体类 深度转换器* @return*/public <T, S> T convertor(S source, Class<T> clz) {if (source == null) return null;return mapper.map(source, clz);}public void convertor(Object source, Object object) {mapper.map(source, object);}public <T> void copyConvertor(T source, Object object) {mapper.map(source, object);}}
接下来是dozer的xml配置,但是我没有使用,
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://dozer.sourceforge.net"xsi:schemaLocation="http://dozer.sourceforge.nethttp://dozer.sourceforge.net/schema/beanmapping.xsd"><mapping><!--对应的实体和要转换成的VO或者使用注解@Mapping,使用注解就不用配置类了--><!--@Mapping 用在字段名不一样的地方,下面的field同理--><class-a>com.jntech.model.sqlserver2.Employee</class-a><class-b>com.jntech.vo.EmployeeVO</class-b><!--对应要转换的属性名.<a>和<class-a>对应,其它同理--><field><a>employeeid</a><b>id</b></field><field><a>emaddress</a><b>address</b></field></mapping> </mappings>
然后创建两个实体类测试
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;/*** <p>* * </p>** @author zxy* @since 2022-03-23*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="User对象", description="")
@TableName("user")
public class UserDO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "UUID用户id")@TableId(type = IdType.ASSIGN_UUID)private String userId;@ApiModelProperty(value = "登录用户名")private String username;@ApiModelProperty(value = "密码")private String password;@ApiModelProperty(value = "用户信息id")private String userInfoId;@ApiModelProperty(value = "用户权限")private String role;@ApiModelProperty(value = "创建时间")private Long ctime;@ApiModelProperty(value = "修改时间")private Long mtime;}
import lombok.Data;/*** @author zxy* @Classname UserVO* @Date 2022/3/29 15:18*/
@Data
public class UserVO {private String userId;private String username;private String userInfoId;private String Role;
}
最后进行单元测试