Skip to content

DO/VO/DTO/枚举 模板

占位符说明

占位符说明示例
{basePackage}项目基础包路径cn.szhn.poc.service
{module}业务模块名称(小驼峰)demostu, teacher
{Xxx}业务实体名称(大驼峰)DemoStu, Teacher
{xxx}业务实体名称(小驼峰)demoStu, teacher
{业务名称}业务中文描述学生, 教师
{XXX}业务实体名称(全大写)DEMOSTU, TEACHER
{table_name}数据表名(蛇形命名)tb_b_demo_stu
{作者名}代码作者彭业庆
{yyyy-MM-dd}创建日期2026-05-13

DO(数据对象)

java
package {basePackage}.domain.{module}.model;

import cn.com.digitalhainan.mybatis.model.KingBaseDO;

/**
 * <p>{业务名称}数据对象</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("tb_b_{table_name}")
public class {Xxx}DO extends KingBaseDO {

    @TableId(type = IdType.ASSIGN_ID)
    private String id;

    private String name;

    private Integer age;

    private String status;
}

关键规约

规约项要求
基类继承Kingbase → KingBaseDO,非Kingbase → BaseDO,禁止自定义 BaseDO
审计字段基类已包含 creator/updator/createTime/updateTime/disable/version,DO 中禁止重复定义
注解@Data, @EqualsAndHashCode(callSuper = true), @TableName, @TableId(type = IdType.ASSIGN_ID)

VO(View Object - 入参)

查询条件 VO(继承 BasePageQueryVO)

java
package {basePackage}.business.{module}.model.vo;

import cn.com.digitalhainan.common.common.vo.BasePageQueryVO;

/**
 * <p>{业务名称}列表查询条件VO</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "{业务名称}列表查询条件")
public class {Xxx}QueryVO extends BasePageQueryVO {

    @Schema(description = "{字段描述}")
    private String name;

    @Schema(description = "{字段描述}")
    private Integer age;

    @Schema(description = "{字段描述}")
    private String status;
}

入参 VO(新增/修改)

java
package {basePackage}.business.{module}.model.vo;

/**
 * <p>{业务名称}信息VO</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
@Data
@Schema(description = "{业务名称}信息")
public class {Xxx}VO {

    @Schema(description = "{业务名称}id")
    private String id;

    @NotBlank(message = "{字段描述}不能为空")
    @Size(min = 1, max = 50, message = "{字段描述}长度必须在1-50之间")
    @Schema(description = "{字段描述}", example = "示例值")
    private String name;

    @NotNull(message = "{字段描述}不能为空")
    @Min(value = 1, message = "{字段描述}必须大于等于1")
    @Max(value = 150, message = "{字段描述}必须小于等于150")
    @Schema(description = "{字段描述}", example = "20")
    private Integer age;

    @NotBlank(message = "{字段描述}不能为空")
    @Schema(description = "{字段描述}", example = "0")
    private String status;
}

关键规约

规约项要求
分页查询 VO必须继承 BasePageQueryVO,基类已包含 pageNum/pageSize
参数校验使用 Jakarta Validation(@NotBlank, @NotNull, @Min, @Max, @Size
校验消息每个校验注解必须有自定义 message
Swagger 注解统一使用 Swagger v3 @Schema 注解

DTO(Data Transfer Object - 返参)

java
package {basePackage}.business.{module}.model.dto;

/**
 * <p>{业务名称}分页列表响应DTO</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
@Data
@Schema(description = "{业务名称}分页列表响应")
public class {Xxx}PageDTO {

    @Schema(description = "{业务名称}id")
    private String id;

    @Schema(description = "{字段描述}")
    private String name;

    @Schema(description = "{字段描述}")
    private Integer age;

    @Schema(description = "创建时间")
    private Date createTime;
}

关键规约

规约项要求
返参统一Controller/Service/Manager 层返参统一使用 DTO
无校验逻辑DTO 是纯数据传输对象,不包含校验注解
分页返回必须使用 PaginationInfoResDTO<{Xxx}DTO> 包裹

枚举常量(按需生成)

当业务场景需要异常处理、日志记录或状态管理时,参考以下模板生成对应的枚举类。

业务异常码枚举

java
package {basePackage}.business.{module}.constants;

import cn.com.digitalhainan.common.core.exception.IBusinessExceptionCodeConfiguration;

/**
 * <p>{业务名称}模块业务异常码枚举</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
@AllArgsConstructor
@NoArgsConstructor
public enum {Xxx}OfBusinessExceptionCodeEnum implements IBusinessExceptionCodeConfiguration {

    {XXX}_NOT_FOUND("{业务名称}信息不存在"),
    {XXX}_SAVE_FAILED("{业务名称}信息保存失败");

    private String defaultMsg;

    @Override
    public String code() {
        return this.name();
    }

    @Override
    public String defaultMsg() {
        return StringUtils.isEmpty(defaultMsg) ? code() : defaultMsg;
    }
}

日志码枚举

java
package {basePackage}.business.{module}.constants;

import cn.com.digitalhainan.log.constants.ILogCodeConfiguration;
import {basePackage}.constants.ProgramConstant;

/**
 * <p>{业务名称}模块日志码枚举</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
public enum {Xxx}OfLogCodeEnum implements ILogCodeConfiguration {

    {XXX}_QUERY_LOG,
    {XXX}_ADD_LOG,
    {XXX}_UPDATE_LOG,
    {XXX}_DELETE_LOG,
    {XXX}_ENABLE_LOG;

    @Override
    public String appCode() {
        return ProgramConstant.APP_CODE;
    }

    @Override
    public String code() {
        return this.name();
    }
}

状态枚举

java
package {basePackage}.business.{module}.constants;

/**
 * <p>{业务名称}状态枚举</p>
 *
 * @author {作者名}
 * @since {yyyy-MM-dd}
 */
@Getter
@AllArgsConstructor
public enum {Xxx}StatusEnum {

    ENABLE(1, "启用"),
    DISABLE(2, "禁用");

    private final int code;
    private final String desc;
}

枚举使用指南

枚举类型实现接口Lombok 注解关键方法
业务异常码IBusinessExceptionCodeConfiguration@AllArgsConstructor, @NoArgsConstructorcode(), defaultMsg()
日志码ILogCodeConfigurationappCode(), code()
状态枚举@Getter, @AllArgsConstructorgetCode(), getDesc()

使用示例

  • 异常抛出:throw BusinessException.error({Xxx}OfBusinessExceptionCodeEnum.{XXX}_NOT_FOUND)
  • 日志记录:log.info("[{}] add, param: {}", {Xxx}OfLogCodeEnum.{XXX}_ADD_LOG.code(), vo)
  • 状态设置:{xxx}DO.setStatus({Xxx}StatusEnum.ENABLE.getCode())

Power By 数字海南