modelMapper简化实体类的setget方法

利用modelMapper实现对model的聚合

1、导入依赖(maven项目,非maven要导入jar包)

		 <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.3.5</version>
        </dependency>

2、写配置类

import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
public class ModelMapperConfig {

	@Bean
	@Scope("singleton")
	public ModelMapper modelMapper() {
		ModelMapper modelMapper = new ModelMapper();
		// 默认为standard模式,设置为strict模式
		modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
		// 验证映射
		modelMapper.validate();
		// 配置代码
		return modelMapper;

	}
}

3、要聚合的model

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String userName;
    private String password;
    private Integer gender;//0-未知,1-男,2-女
    private Long cityId;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class City {
    private Long id;
    private String name;
    private Long parentId;
}

4、聚合后的model

import org.modelmapper.AbstractConverter;
import org.modelmapper.Converter;
import org.modelmapper.PropertyMap;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo {
    private Long id;
    private String UserName;
    private String cityName;
    private String gender;

    public static String[] genders={"男","女","未知"};

    /**
     * User转UserVo自定义映射规则
     */
    public static PropertyMap<User, UserVo> UserToUserVoMap = new PropertyMap<User, UserVo>() {
        protected void configure() {
            using(toGender).map(source.getGender(),destination.getGender());

        }
    };

     /**
     * 自定义转换规则,将int的genderId翻译为String类型的gender,如1-->"女"
     */
    public static Converter<Integer, String> toGender = new AbstractConverter<Integer, String>() {
        protected String convert(Integer genderId) {
            return genders[genderId];
        }
    };


    /**
     * City转UserVo自定义映射规则
     */
    public static PropertyMap<City, UserVo> CityToUserVoMap = new PropertyMap<City, UserVo>() {
        protected void configure() {
           map(source.getName(),destination.getCityName());
        }
    };

}

5、测试

    @Test
    public void testModelMapper() {
        User user = new User(1L, "jack", "123456", 1, 2L);
        City city = new City(2L, "重庆", 0L);
        System.out.println(user.toString());
        System.out.println(city.toString());
        // 策略
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addMappings(UserVo.UserToUserVoMap);
        modelMapper.addMappings(UserVo.CityToUserVoMap);
        // 调用方法进行聚合
        UserVo userVo = modelMapper.map(city, UserVo.class);
        modelMapper.map(user, userVo);

        System.out.println(userVo.toString());

    }
    
发布了43 篇原创文章 · 获赞 36 · 访问量 2235

猜你喜欢

转载自blog.csdn.net/qq_17589751/article/details/102744592