利用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 ( ) ;
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;
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= { "男" , "女" , "未知" } ;
public static PropertyMap< User, UserVo> UserToUserVoMap = new PropertyMap < User, UserVo> ( ) {
protected void configure ( ) {
using ( toGender) . map ( source. getGender ( ) , destination. getGender ( ) ) ;
}
} ;
public static Converter< Integer, String> toGender = new AbstractConverter < Integer, String> ( ) {
protected String convert ( Integer genderId) {
return genders[ genderId] ;
}
} ;
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 ( 1 L, "jack" , "123456" , 1 , 2 L) ;
City city = new City ( 2 L, "重庆" , 0 L) ;
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 ( ) ) ;
}