• 对象转换之modelmapper


     

    1. 官网地址:http://modelmapper.org

          源码地址:GitHub - modelmapper/modelmapper: Intelligent object mapping

    2.实现原理:

      主要是基于匹配策略进行属性的转化,目前支持三种策略:

        2.1 Standard(默认标准规则)

        2.2 Loose  松散型

        2.3 Strict   严格匹配

    3.实战:

         这里我们以springboot集成案例演示,

            方式一:Spring Boot Devtools+modelmapper

    配置文件增加(需要集成springboot devtools)

        restart.include.modelmapper=/modelmapper-(.*).jar

            方式二: maven包

    1. org.modelmapper
    2. modelmapper
    3. 3.1.1

            3.1 属性映射

            3.2 类型映射继承

           3.3  校验

            3.4   配置

            3.5 转化映射

            3.6 Provider

            3.7 通用

    附demo:

    1. public class Game {
    2. Address address;
    3. public Address getAddress() {
    4. return address;
    5. }
    6. public void setAddress(Address address) {
    7. this.address = address;
    8. }
    9. }
    10. }
    1. public class Address {
    2. String street;
    3. String city;
    4. String address;
    5. public Address() {
    6. }
    7. public Address(String street, String city, String address) {
    8. this.street = street;
    9. this.city = city;
    10. this.address = address;
    11. }
    12. public Address(String street, String city) {
    13. this.street = street;
    14. this.city = city;
    15. }
    16. public String getStreet() {
    17. return street;
    18. }
    19. public void setStreet(String street) {
    20. this.street = street;
    21. }
    22. public String getCity() {
    23. return city;
    24. }
    25. public void setCity(String city) {
    26. this.city = city;
    27. }
    28. public String getAddress() {
    29. return address;
    30. }
    31. public void setAddress(String address) {
    32. this.address = address;
    33. }
    34. public class Game {
    35. Address address;
    36. public Address getAddress() {
    37. return address;
    38. }
    39. public void setAddress(Address address) {
    40. this.address = address;
    41. }
    42. }
    1. public class GameDTO {
    2. String street;
    3. String city;
    4. String address;
    5. public String getStreet() {
    6. return street;
    7. }
    8. public void setStreet(String street) {
    9. this.street = street;
    10. }
    11. public String getCity() {
    12. return city;
    13. }
    14. public void setCity(String city) {
    15. this.city = city;
    16. }
    17. public String getAddress() {
    18. return address;
    19. }
    20. public void setAddress(String address) {
    21. this.address = address;
    22. }
    23. @Override
    24. public String toString() {
    25. final StringBuffer sb = new StringBuffer("GameDTO{");
    26. sb.append("street='").append(street).append('\'');
    27. sb.append(", city='").append(city).append('\'');
    28. sb.append(", address='").append(address).append('\'');
    29. sb.append('}');
    30. return sb.toString();
    31. }
    32. }

    1. import org.junit.jupiter.api.Test;
    2. import org.modelmapper.ModelMapper;
    3. import org.modelmapper.PropertyMap;
    4. import org.modelmapper.TypeMap;
    5. import org.modelmapper.convention.MatchingStrategies;
    6. public class MainTest {
    7. @Test
    8. public void testStrage() {
    9. ModelMapper modelMapper = new ModelMapper();
    10. PropertyMap personMap = new PropertyMap() {
    11. protected void configure() {
    12. map().setStreet(source.getAddress().getStreet());
    13. map(source.getAddress().city, destination.city);
    14. }
    15. };
    16. modelMapper.addMappings(personMap);
    17. //
    18. Game game=new Game();
    19. Address address=new Address();
    20. address.setStreet("street");
    21. address.setCity("city");
    22. game.setAddress(address);
    23. GameDTO gameDTO = modelMapper.map(game, GameDTO.class);
    24. System.out.println("PropertyMap="+gameDTO);
    25. //设置策略
    26. ModelMapper modelMapper1 = new ModelMapper();
    27. modelMapper1.getConfiguration().setMatchingStrategy(MatchingStrategies.STANDARD);
    28. GameDTO gameDTO1 = modelMapper1.map(game, GameDTO.class);
    29. System.out.println("STANDARD="+gameDTO1);
    30. //设置策略
    31. ModelMapper modelMapper2 = new ModelMapper();
    32. modelMapper2.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
    33. GameDTO gameDTO2 = modelMapper2.map(game, GameDTO.class);
    34. System.out.println("STRICT="+gameDTO2);
    35. //设置策略
    36. ModelMapper modelMapper3 = new ModelMapper();
    37. modelMapper3.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE);
    38. GameDTO gameDTO3 = modelMapper3.map(game, GameDTO.class);
    39. System.out.println("LOOSE="+gameDTO3);
    40. }
    41. //测试深度映射
    42. @Test
    43. public void testDeepMapping() {
    44. ModelMapper modelMapper = new ModelMapper();
    45. TypeMap typeMap = modelMapper.createTypeMap(Game.class, GameDTO.class);
    46. typeMap.addMappings(
    47. mapper -> mapper.map(src ->src.getAddress().getAddress(),GameDTO::setAddress)
    48. );
    49. Game game = new Game();
    50. game.setAddress(new Address("1", "John","address"));
    51. GameDTO gameDTO = modelMapper.map(game, GameDTO.class);
    52. System.out.println("dto:"+gameDTO);
    53. }
    54. //测试 skip
    55. @Test
    56. public void testSkipMapping() {
    57. ModelMapper modelMapper = new ModelMapper();
    58. TypeMap typeMap = modelMapper.createTypeMap(Game.class, GameDTO.class);
    59. typeMap.addMappings(
    60. mapper -> mapper.skip(GameDTO::setAddress)
    61. );
    62. Game game = new Game();
    63. game.setAddress(new Address("1", "John","address"));
    64. GameDTO gameDTO = modelMapper.map(game, GameDTO.class);
    65. System.out.println("dto:"+gameDTO);
    66. }
    67. //测试 skip null 属性
    68. @Test
    69. public void testSkipNullMapping() {
    70. ModelMapper modelMapper = new ModelMapper();
    71. modelMapper.getConfiguration().setSkipNullEnabled(true);
    72. Game game = new Game();
    73. //Address 的address属性为空,不copy
    74. game.setAddress(new Address("1", "John",""));
    75. GameDTO gameDTO = modelMapper.map(game, GameDTO.class);
    76. System.out.println("dto:"+gameDTO);
    77. }
    78. }

  • 相关阅读:
    Android,InputMethod.java简单认识
    超 Nice 的表格响应式布局小技巧
    优橙内推甘肃专场——5G网络优化(中高级)工程师
    HTML5+CSS3小实例:简约灵动的深色登录界面
    对于补码的个人理解
    Go字符串、Unicode rune、byte字节相互转换
    docker 启动简单的开发环境(mysql, redis, etcd)
    .NET静态代码织入——肉夹馍(Rougamo)发布2.0
    docker怎样安装redis
    华为鸿蒙技术官带你庖丁解牛般的理解Linux操作系统内核分析
  • 原文地址:https://blog.csdn.net/u012257776/article/details/133807636