• 前置条件

    在开发之前,请确保

    介绍

    demo 需涉及到 domain 层的 entity、多 entityservicerepository 接口类以及 infra 层的 repository 实现类

    编写entity

    .1 实体规范

    .2 User.java 代码

    package org.hzero.todo.domain.entity;
    
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.Pattern;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import org.hibernate.validator.constraints.Length;
    
    import io.choerodon.mybatis.annotation.ModifyAudit;
    import io.choerodon.mybatis.annotation.VersionAudit;
    import io.choerodon.mybatis.domain.AuditDomain;
    
    import org.hzero.core.util.Regexs;
    
    @ApiModel("用户信息") // Swagger 实体描述
    @ModifyAudit //在类上使用,启用审计字段支持,实体类加上该注解后,插入和更新会启动对 lastUpdateDate、lastUpdatedBy 自维护字段支持
    @VersionAudit //在类上使用,启用objectVersionNumber自维护支持,插入一条数据objectVersionNumber默认为1,每次update后objectVersionNumber自增1
    @Table(name = "todo_user") // 表映射
    @JsonInclude(JsonInclude.Include.NON_NULL) // 数据返回前端时,排除为空的字段
    public class User extends AuditDomain { //AuditDomain包含5个自维护字段,使用@ModifyAudit和@VersionAudit的实体类要继承该类
    
        @Id // 主键主键,注意是 javax.persistence.Id
        @GeneratedValue //对于自增张、序列(SEQUENCE)类型的主键,需要添加该注解
        private Long id;
        @Length(max = 30) // 长度控制
        @NotBlank // 非空控制
        @ApiModelProperty("员工姓名") // Swagger 字段描述
        private String employeeName;
        @Length(max = 30)
        @NotBlank
        @Pattern(regexp = Regexs.CODE, message = "htdo.warn.user.numberFormatIncorrect") // 格式控制
        @ApiModelProperty("员工编号")
        private String employeeNumber;
        @Length(max = 60)
        @Pattern(regexp = Regexs.EMAIL, message = "htdo.warn.user.emailFormatIncorrect")
        @ApiModelProperty("员工邮箱")
        private String email;
    
        // 省略 getter/setter 方法
    }
    

    .3 Task.java 代码

    package org.hzero.todo.domain.entity;
    
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.validation.constraints.NotBlank;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import org.hibernate.validator.constraints.Length;
    
    import io.choerodon.mybatis.annotation.ModifyAudit;
    import io.choerodon.mybatis.annotation.VersionAudit;
    import io.choerodon.mybatis.domain.AuditDomain;
    
    @ApiModel("任务信息")
    @ModifyAudit
    @VersionAudit
    @Table(name = "todo_task")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class Task extends AuditDomain {
    
        public static final String FIELD_ID = "id";
        public static final String FIELD_EMPLOYEE_ID = "employeeId";
        public static final String FIELD_STATE = "state";
        public static final String FIELD_TASK_DESCRIPTION = "taskDescription";
    
        @Id
        @GeneratedValue
        private Long id;
        @NotNull(message = "用户ID不能为空")
        @ApiModelProperty("用户ID")
        private Long employeeId;
        @ApiModelProperty("任务状态")
        private String state;
        @ApiModelProperty("任务编号")
        private String taskNumber;
        @Length(max = 240)
        @ApiModelProperty("任务描述")
        private String taskDescription;
        @NotNull
        @ApiModelProperty("租户ID")
        private Long tenantId;
    
        @Transient
        @ApiModelProperty("员工编号")
        private String employeeNumber;
        @Transient
        @ApiModelProperty("员工姓名")
        private String employeeName;
    
        /**
         * 生成任务编号
         */
        public void generateTaskNumber() {
            this.taskNumber = UUID.randomUUID().toString().replace("-", "");
        }
    
        // 省略 getter/setter
    }
    

    编写Repository

    .1 Repository 接口类

    .2 UserRepository.java 代码

    package org.hzero.todo.domain.repository;
    
    import org.hzero.mybatis.base.BaseRepository;
    import org.hzero.todo.domain.entity.User;
    
    /**
     * 用户资源库
     */
    public interface UserRepository extends BaseRepository<User> {
    
    }
    

    .3 TaskRepository.java 代码

    package org.hzero.todo.domain.repository;
    
    import java.util.List;
    import io.choerodon.core.domain.Page;
    import io.choerodon.mybatis.pagehelper.domain.PageRequest;
    import org.hzero.mybatis.base.BaseRepository;
    import org.hzero.todo.domain.entity.Task;
    
    /**
     * 任务资源库
     */
    public interface TaskRepository extends BaseRepository<Task> {
    
        /**
         * 分页查询任务
         * 
         * @param task Task
         * @param pageRequest 分页参数
         * @return Page<Task>
         */
        Page<Task> pageTask(Task task, PageRequest pageRequest);
    
        /**
         * 根据员工ID查询任务
         * 
         * @param employeeId 员工ID
         * @return List<Task>
         */
        List<Task> selectByEmployeeId(Long employeeId);
    
        /**
         * 根据任务编号查询任务详细(包含员工姓名)
         * 
         * @param taskNumber 任务编号
         * @return Task
         */
        Task selectDetailByTaskNumber(String taskNumber);
    }
    

    编写Service

    .1 Domain Service 接口类

    .2 Service 实现类