主键
自增id or 随机id
内部系统 / 单库单表 → 用自增 ID
对外暴露 / 分布式 / 安全敏感 → 用随机 ID(UUID / Snowflake)
自增id:
- 优点:简单,性能最好,索引友好,可读性强
- 缺点:对外接口会暴露业务规模,分库分表时会有冲突
随机id/分布式id:
常见类型:
| 类型 | 示例 |
|---|
| UUID | 550e8400-e29b-41d4-a716-446655440000 |
| Snowflake | 185291834918273024 |
| 自研ID | 时间戳 + 随机数 |
属性
数值
| Java 类型 | JPA 默认映射 | MySQL 常见类型 | 说明 |
|---|
Long | BIGINT | BIGINT | 主键首选 |
Integer | INTEGER | INT | 普通整数 |
Short | SMALLINT | SMALLINT | 状态码 |
Byte | TINYINT | TINYINT | 布尔 / 小枚举 |
BigDecimal | NUMERIC | DECIMAL(p,s) | 金额 / 精确计算(推荐) |
Double | DOUBLE | DOUBLE | 近似值,不推荐金额 |
Float | FLOAT | FLOAT | 精度更差 |
字符串&文本类型
| Java 类型 | JPA 注解 | MySQL 类型 | 使用场景 |
|---|
String | 无 | VARCHAR(255) | 标题 / 名称 |
String | @Column(length=50) | VARCHAR(50) | 短文本 |
String | @Lob | TEXT | 正文 / 大文本 |
String | @Lob + columnDefinition="LONGTEXT" | LONGTEXT | 超长正文 |
布尔类型
| Java 类型 | JPA 映射 | MySQL 类型 | 说明 |
|---|
Boolean | BOOLEAN | TINYINT(1) | 推荐 |
boolean | BOOLEAN | TINYINT(1) | 不可为 null |
时间/日期类型
| Java 类型 | JPA | MySQL 类型 | 推荐度 |
|---|
LocalDateTime | TIMESTAMP | DATETIME | ⭐⭐⭐⭐⭐ |
LocalDate | DATE | DATE | ⭐⭐⭐⭐ |
LocalTime | TIME | TIME | ⭐⭐⭐ |
Date(旧) | TIMESTAMP | DATETIME | ❌ 不推荐 |
枚举类型
| Java 枚举写法 | SQL 类型 | 风险 |
|---|
@Enumerated(ORDINAL) | INT | ❌ 顺序变就炸 |
@Enumerated(STRING) | VARCHAR(20) | ✅ 推荐 |