# bean-mapping
**Repository Path**: mirrors_cyt1010602131/bean-mapping
## Basic Information
- **Project Name**: bean-mapping
- **Description**: 🍁Bean mapping tool for java.(java 对象属性映射框架,基于注解灵活地指定映射。)
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-08-02
- **Last Updated**: 2025-09-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 项目简介
本项目用于 java 对象属性赋值。
项目中经常需要将一个对象的属性,赋值到另一个对象中。
常见的工具有很多,但都多少不够简洁,要么不够强大。
[](http://mvnrepository.com/artifact/com.github.houbb/bean-mapping)
[](https://www.travis-ci.org/houbb/bean-mapping?branch=master)
[](https://coveralls.io/github/houbb/bean-mapping?branch=master)
## 特性
- 支持对象属性的浅拷贝
- 支持不同名称字段的指定赋值
- 支持自定义字段属性赋值的条件,比如目标字段不为 null 才进行赋值
- 支持自定义字段值转换,可以转换为其他类型,或者相同类型
### 0.2.0 版本新特性
- 支持属性字段为【对象】【集合】【数组】的赋值,对象赋值更加方便。
# 变更日志
> [变更日志](https://github.com/houbb/bean-mapping/blob/master/doc/CHANGELOG.md)
# 快速开始
## 准备
JDK1.8 及其以上版本
Maven 3.X 及其以上版本
## maven 项目依赖
```xml
com.github.houbb
bean-mapping-core
0.2.0
```
## 核心类说明
### BeanUtil
提供一个简单的静态方法 copyProperties。
```java
/**
* 复制属性
* 将 source 中的赋值给 target 中名称相同,且可以赋值的类型中去。类似于 spring 的 BeanUtils。
* @param source 原始对象
* @param target 目标对象
*/
public static void copyProperties(final Object source, Object target)
```
# 测试代码参考
详情参见 bean-mapping-test 模块下的测试代码。
# 示例代码
## 对象的定义
- BaseSource.java & BaseTarget.java
其中 BaseSource 对象和 BaseTarget 对象的属性是相同的。
```java
public class BaseSource {
/**
* 名称
*/
private String name;
/**
* 年龄
*/
private int age;
/**
* 生日
*/
private Date birthday;
/**
* 字符串列表
*/
private List stringList;
//getter & setter
}
```
## 属性赋值测试案例
我们构建 BaseSource 的属性,然后调用
```java
BeanUtil.copyProperties(baseSource, baseTarget);
```
类似于 spring BeanUtils 和 Apache BeanUtils,并验证结果符合我们的预期。
```java
/**
* 基础测试
*/
@Test
public void baseTest() {
BaseSource baseSource = buildBaseSource();
BaseTarget baseTarget = new BaseTarget();
BeanUtil.copyProperties(baseSource, baseTarget);
// 断言赋值后的属性和原来相同
Assertions.assertEquals(baseSource.getAge(), baseTarget.getAge());
Assertions.assertEquals(baseSource.getName(), baseTarget.getName());
Assertions.assertEquals(baseSource.getBirthday(), baseTarget.getBirthday());
Assertions.assertEquals(baseSource.getStringList(), baseTarget.getStringList());
}
/**
* 构建用户信息
* @return 用户
*/
private BaseSource buildBaseSource() {
BaseSource baseSource = new BaseSource();
baseSource.setAge(10);
baseSource.setName("映射测试");
baseSource.setBirthday(new Date());
baseSource.setStringList(Arrays.asList("1", "2"));
return baseSource;
}
```
# 拓展阅读
实际工作中,我们遇到的情况会比这个复杂一些。
比如两个字段名称不同,我们也想进行赋值,值得处理转换等等。
Bean-Mapping 相关文档:
[项目模块简介和预期功能](doc/blog/属性复制框架-00-项目模块和预期功能.md)
[BeanMapping 注解的引入](doc/blog/属性复制框架-01-BeanMapping%20注解引入.md)
[不同名称字段的指定赋值](doc/blog/属性复制框架-02-BeanMapping%20名称属性.md)
[自定义赋值生效的条件](doc/blog/属性复制框架-03-BeanMapping%20赋值条件.md)
[自定义字段转换实现](doc/blog/属性复制框架-04-BeanMapping%20字段转换.md)
[支持属性字段为【对象】【集合】【数组】的赋值](doc/blog/属性复制框架-05-BeanMappingEntry.md)