# 用法

## 依赖引入

#### Maven

```
<dependency>
    <groupId>com.taocares.commons</groupId>
    <artifactId>commons-beans</artifactId>
</dependency>
```

{% hint style="info" %}
依赖版本由dependency-bom统一管理
{% endhint %}

## 基本用法

#### 将源对象拷贝到已有的目标对象：

```java
BeanUtils.copyProperties(sourceObject, targetObject);
```

#### 拷贝源对象并生成新的目标对象：

```java
TargetObject targetObject = BeanUtils.copyProperties(sourceObject, TargetObject.class);
```

#### 拷贝源对象集合并生成目标对象集合：

```java
List<TargetObject> targetObjects = BeanUtils.copyProperties(sourceObjects, TargetObject.class);
Set<TargetObject> targetObjects = BeanUtils.copyProperties(sourceObjects, TargetObject.class);
```

{% hint style="info" %}
`BeanUtils`提供了`Page`对象的拷贝方法，但是建议使用原生的`Page#map`方法进行数据的转换
{% endhint %}

## 映射配置

```java
class Foo {
    String name;
    Date createTime;
    Bar bar;
}
class FooDto {
    String name;
    @Mapping(datePattern="yyyy-MM-dd HH:mm")
    String createTime;
    @Mapping(field="bar.name", oneway=true)
    String barName;
    @Nested(thisClass=BarDto.class, thatClass=Bar.class)
    BarDto bar;
}
```

{% hint style="info" %}
说明：

* 对于名称、类型完全相同的字段，无需任何配置
* 支持以下简单类型的自动转换，无需指定转换器
  * `Date` ↔ `LocalDate`/`LocalTime`/`LocalDateTime`
  * `String` ↔ `Integer`/`Long`/`Float`/`Double`/`Boolean`
  * `Number` → `Integer`/`Long`/`Float`/`Double`/`Boolean`
  * `Object` → `String`
  * 自动拆箱/自动装箱
* 使用"."获取嵌套对象的属性，设置`oneway=true`表示单向映射
* 使用`@Nested`指定嵌套的对象类型，从而实现自动转换
  {% endhint %}
