# auto-mapping **Repository Path**: baichuaniot/auto-mapping ## Basic Information - **Project Name**: auto-mapping - **Description**: 使用auto-mapping是一个对象自动映射工具类库,可以帮助开发人员减少将java实体对象映射到Dto对象需要代码工作量。 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-22 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # auto-mapping ## 介绍 auto-mapping 是一个 Java 对象映射工具,用于简化不同对象之间的属性映射和转换。它支持自动识别字段、枚举转换、嵌套对象映射等功能,适用于简化数据传输对象(DTO)与实体之间的转换操作。 ## 特性 - 支持字段级别的映射配置。 - 提供灵活的属性过滤功能,可指定映射字段。 - 支持枚举类型映射,能够获取枚举描述信息。 - 具备处理嵌套对象及集合类型映射的能力。 - 提供缓存机制优化映射性能。 ## 安装方法 ### 依赖 - JDK 1.8 或更高版本。 - 依赖框架反射机制进行字段和方法的动态处理。 - 使用 Lombok 注解简化 Getter/Setter 编写。 ## Maven引入 ```xml com.baichuan-iot auto-mapping 0.1.0 ``` ## 快速使用 以一个将Student对象的属性映射为对应DTO对象为例 ```java @Getter @Setter public class Student { private String name; private int age; private Gender gender; private School school; private List courses; } /** * 性别 */ public enum Gender { @EnumDescription("男") MALE, @EnumDescription("女") FEMALE, } @Getter @Setter public class School { private int id; private String name; private String address; } @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Course { private Integer id; private String name; } ``` DTO对象定义如下: ```java @Getter public class StudentDto { @Mapping private String name; @Mapping private int age; @Mapping private String gender; @Mapping private SchoolDto school; @Mapping private List courses; } @Getter public class SchoolDto { @Mapping private int id; @Mapping private String name; @Mapping private String address; } @Getter public class CourseDto { @Mapping private Integer id; @Mapping private String name; } ``` 使用方法 ```java public class BeanMapperTest { private Student student; @BeforeEach public void setUp() { School school = new School(); school.setId(10); school.setName("清华大学"); school.setAddress("五道口"); List courses = new LinkedList<>(); courses.add(new Course(1, "高等数学")); courses.add(new Course(2, "线性代数")); student = new Student(); student.setName("张晓军"); student.setAge(20); student.setGender(Gender.MALE); student.setSchool(school); student.setCourses(courses); } @Test public void mapTestWithoutProperties() { // 不指定属性时,默认映射所有@Mapping注释的属性 StudentDto studentDto = BeanMapper.map(student, StudentDto.class); Assertions.assertEquals("张晓军", studentDto.getName()); Assertions.assertEquals(20, studentDto.getAge()); Assertions.assertEquals("男", studentDto.getGender()); SchoolDto schoolDto = studentDto.getSchool(); Assertions.assertEquals(10, schoolDto.getId()); Assertions.assertEquals("清华大学", schoolDto.getName()); Assertions.assertEquals("五道口", schoolDto.getAddress()); List courseDtos = studentDto.getCourses(); Assertions.assertEquals(1, courseDtos.get(0).getId()); Assertions.assertEquals("高等数学", courseDtos.get(0).getName()); Assertions.assertEquals(2, courseDtos.get(1).getId()); Assertions.assertEquals("线性代数", courseDtos.get(1).getName()); } @Test public void mapTestWithProperties() { Set properties = new HashSet<>(); properties.add("age"); properties.add("courses"); // 指定映射的属性 StudentDto studentDto = BeanMapper.map(student, StudentDto.class, properties); Assertions.assertNull(studentDto.getName()); Assertions.assertEquals(student.getAge(), studentDto.getAge()); Assertions.assertNull(studentDto.getGender()); Assertions.assertNull(studentDto.getSchool()); Assertions.assertEquals(2, studentDto.getCourses().size()); } } ``` ### 获取更多支持 - 检查 `src/main/java` 目录下的核心类。 - 查看 `src/test/java` 目录下的测试用例了解详细用法。 ## License 请查看项目根目录下的 `LICENSE` 文件。