leniu-java-entity
SKILL.md
leniu Entity/VO/DTO 规范
项目特征速查
| 项 | 值 |
|---|---|
| 包名 | net.xnzn.core.* |
| JDK | 21 → jakarta.validation.*(禁用 javax) |
| 工具库 | Hutool(BeanUtil / CollUtil / ObjectUtil / StrUtil) |
| 金额 | Long(分)或 BigDecimal(分),前端用 money() 转元 |
| 审计字段 | crby / crtime / upby / uptime |
| 逻辑删除 | 1=删除,2=正常(与 RuoYi 相反) |
| Entity 特点 | 无基类、无 Serializable |
Entity 模板(核心)
@Data
@Accessors(chain = true)
@TableName(value = "table_name", autoResultMap = true)
public class XxxEntity {
@TableId
@ApiModelProperty("主键ID")
private Long id;
// --- 业务字段 ---
@ApiModelProperty("名称")
private String name;
// --- 审计字段 ---
@ApiModelProperty("删除标识(1-删除,2-正常)")
private Integer delFlag;
@TableField(fill = FieldFill.INSERT)
private String crby;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime crtime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String upby;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime uptime;
// --- 静态工厂(预设默认值) ---
public static XxxEntity newDefaultInstance() {
XxxEntity e = new XxxEntity();
e.setDelFlag(2); // 2=正常
return e;
}
// --- 领域业务方法(可选) ---
}
要点:
- 无基类,审计字段直接定义
@TableName一般带autoResultMap = true;报表 Model 不带(无 BaseMapper)- 可含
newDefaultInstance()工厂方法和领域业务方法
VO 模板
@Data
@Accessors(chain = true)
@ApiModel("订单信息")
public class OrderVO {
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("订单金额(元)")
private BigDecimal orderAmount;
@ApiModelProperty("创建时间")
private LocalDateTime crtime;
}
带校验的 VO:
@Data
@Accessors(chain = true)
@ApiModel("订单信息")
public class OrderVO {
@NotNull(message = "用户ID不能为空")
@ApiModelProperty("用户ID")
private Long userId;
@NotNull(message = "订单金额不能为空")
@DecimalMin(value = "0.01", message = "订单金额必须大于0")
@ApiModelProperty("订单金额(元)")
private BigDecimal orderAmount;
}
Param 模板(分页查询)
@Data
@ApiModel("订单查询参数")
public class OrderQueryParam implements Serializable {
@NotNull(message = "分页参数不能为空")
@ApiModelProperty(value = "分页参数", required = true)
private PageDTO page;
@ApiModelProperty("关键字")
private String keyword;
@ApiModelProperty("状态")
private Integer status;
@ApiModelProperty("开始日期")
private LocalDate startDate;
@ApiModelProperty("结束日期")
private LocalDate endDate;
}
DTO 模板
@Data
@ApiModel("订单数据传输对象")
public class OrderDTO {
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("用户ID")
private Long userId;
@ApiModelProperty("订单状态")
private Integer status;
}
枚举模板
@Getter
@AllArgsConstructor
public enum OrderStatusEnum {
CREATED(1, "已创建"),
PAID(2, "已支付"),
COMPLETED(3, "已完成"),
CANCELLED(4, "已取消");
private final Integer key;
private final String desc;
public static OrderStatusEnum getByKey(Integer key) {
if (key == null) return null;
for (OrderStatusEnum e : values()) {
if (e.getKey().equals(key)) return e;
}
return null;
}
public static String getDescByKey(Integer key) {
OrderStatusEnum e = getByKey(key);
return e != null ? e.getDesc() : "";
}
}
含国际化时,desc 用占位符 "{order.status.created}",重写 getDesc() 调用 I18n.getMessage(desc)。
时间格式化
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate date;
对象转换
// 单对象
Target t = BeanUtil.copyProperties(source, Target.class);
// 列表
List<Target> list = BeanUtil.copyToList(sources, Target.class);
禁止项
// ❌ 继承 RuoYi TenantEntity / BaseEntity
import org.dromara.common.mybatis.core.domain.TenantEntity;
// ❌ javax.validation(JDK 21 必须用 jakarta)
import javax.validation.constraints.NotNull;
// ❌ MapstructUtils(用 BeanUtil.copyProperties)
MapstructUtils.convert(source, Target.class);
// ❌ delFlag: 0=正常(leniu 是 2=正常)
wrapper.eq(XxxEntity::getDelFlag, 0);
// ❌ 错误审计字段名
private String createBy; // 必须 crby
private LocalDateTime createTime; // 必须 crtime
// ❌ Entity 加 tenant_id(双库物理隔离,不需要)
参考文档
- 完整模板示例(Excel导出VO、报表Param等):详见
references/templates.md - 生产代码参考:
sys-canteen/.../order/common/model/OrderInfo.java
Weekly Installs
2
Repository
xu-cell/ai-engi…ing-initGitHub Stars
8
First Seen
7 days ago
Security Audits
Installed on
amp2
cline2
opencode2
cursor2
kimi-cli2
codex2