# data_generator
**Repository Path**: hushnows/data_generator
## Basic Information
- **Project Name**: data_generator
- **Description**: 一个造数神器
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-05-23
- **Last Updated**: 2026-02-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## FakeData 生成工具(Java 8+)
一个轻量级、零依赖、基于注解的 Java 对象模拟数据填充工具。
适用于单元测试、开发调试、演示数据生成等场景。
✅ 兼容 JDK 1.8
✅ 线程安全
✅ 支持 null 随机注入
✅ 支持 NOW / FIXED / RANDOM / STEP 四种生成策略
## 使用
```dtd
org.robert
fakedata
1.0.1
```
> 调用
```java
EventLog eventLog = ObjectGenerator.generate(EventLog.class);
List eventLogs = ObjectGenerator.generateList(EventLog.class, 10);
```
> 目录结构
```dtd
src/main/java
└── org/robert/fakedata/
├── annotation/
│ ├── FakeId.java
│ ├── FakeInt.java
│ ├── FakeString.java
│ ├── FakeLocalDateTime.java
│ └── ...(其他注解)
├── generator/
│ ├── IdGenerator.java
│ ├── IntGenerator.java
│ ├── StringGenerator.java
│ ├── LocalDateTimeGenerator.java
│ └── ...(其他生成器)
└── ObjectGenerator.java
```
### 支持的注解列表
#### 时间数据生成工具
| 注解 | 目标类型 | 说明 |
|------|--------|------|
| `@FakeLocalDateTime` | `LocalDateTime` | 生成带时分秒的本地时间 |
| `@FakeLocalDate` | `LocalDate` | 生成仅日期(年月日) |
| `@FakeDate` | `java.util.Date`| 生成传统 `Date` 对象 |
| `@FakeDateString` | `String` | 生成格式化的日期字符串 |
#### 基础数据类型注解
| 注解 | 目标类型 | 说明 |
|------|--------|------|
| `@FakeId` | `Long`, `Integer`, `String` | 生成唯一 ID(雪花/自增/UUID) |
| `@FakeInt` | `int`, `Integer` | 生成整数 |
| `@FakeLong` | `long`, `Long` | 生成长整型 |
| `@FakeDouble` | `double`, `Double` | 生成浮点数 |
| `@FakeBoolean` | `boolean`, `Boolean` | 生成布尔值 |
| `@FakeChar` | `char`, `Character` | 生成单个字符 |
| `@FakeString` | `String` | 生成随机字符串 |
#### 注解说明
1. @FakeLocalDateTime
作用: 标记字段为需要生成的 LocalDateTime 类型的时间。
属性:
isNull: 是否允许为空(默认 false)
type: 数据生成策略 (NOW, FIXED, RANDOM, STEP)
fixedValue: 当 type = FIXED 时使用的固定值
step: 当 type = STEP 时每次递增的数量
unit: 时间单位 (DAYS, HOURS, 等)
min, max: 当 type = RANDOM 时随机范围的最小值和最大值
2. @FakeLocalDate
作用: 标记字段为需要生成的 LocalDate 类型的日期。
属性:
同 @FakeLocalDateTime,但仅支持天数以上的时间单位。
3. @FakeDate
作用: 标记字段为需要生成的 java.util.Date 类型的时间。
属性:
同 @FakeLocalDateTime,增加了 pattern 属性用于解析固定值。
4. @FakeDateString
作用: 标记字段为需要生成的格式化后的日期字符串。
属性:
同 @FakeDate,但结果是一个字符串而不是 Date 对象。
5. @FakeId
6. @FakeInt
* 生成 [min, max] 范围内的随机整数(含两端)
7. @FakeLong
8. @FakeDouble
9. @FakeBoolean
10. @FakeChar
11. @FakeString
#### 使用方法
```java
public class UserDemo {
// ID 生成
@FakeId(type = FakeIdType.SNOWFLAKE)
private Long userId;
@FakeId(type = FakeIdType.UUID)
private String traceId;
// 基础类型
@FakeString(minLength = 3, maxLength = 10)
private String username;
@FakeInt(min = 18, max = 80)
private Integer age;
@FakeDouble(min = 3000.0, max = 20000.0, scale = 2)
private Double salary;
@FakeBoolean(trueProbability = 0.8)
private Boolean isActive;
@FakeChar(chars = {'M', 'F'})
private Character gender;
// 时间类型
@FakeLocalDateTime(type = FakeDateTypeEnum.STEP, step = 1, unit = FakeDateUnitEnum.HOURS)
private LocalDateTime loginTime;
@FakeLocalDate(type = FakeDateTypeEnum.RANDOM, min = -365, max = 0, unit = FakeDateUnitEnum.DAYS)
private LocalDate registerDate;
@FakeDate(type = FakeDateTypeEnum.FIXED, fixedValue = "2020-01-01 00:00:00")
private Date createdAt;
@FakeDateString(pattern = "yyyy年MM月dd日 HH:mm", type = FakeDateTypeEnum.NOW)
private String lastSeen;
}
```