# 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` 文件。