# Prompt - 基础实体类和Mapper创建 ## 输入引用 引用相关的 docs 文档链接: - [REQ-010-2.md](../requirements/REQ-010-2.md) - 基础实体类和Mapper创建需求文档 - [0011-entity-mapper-create.md](../decisions/adr/0011-entity-mapper-create.md) - 基础实体类和Mapper创建架构决策 - [REQ-010.md](../requirements/REQ-010.md) - Salesforce元数据拉取和部署主需求文档 - [REQ-010-1.md](../requirements/REQ-010-1.md) - 数据库表结构设计和创建 - [metadata-module.md](../reference-code/com/docs/metadata-module.md) - Salesforce Metadata API 模块说明(唯一真源) - [index.md](../reference-code/com/docs/index.md) - Salesforce SOAP API Java 客户端参考文档(唯一真源) ## Context Maps 强制列出本次 Prompt 依赖的 Canvas 文件: - [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示 - **相关节点**: [集成Mapper](node_integration_mapper) - 处理集成相关数据的持久化操作 - **快照时间**: 2026-01-19 00:00:00 ## 目标 为9张数据库表创建对应的Java实体类、Mapper接口和XML映射文件,使用MyBatis Plus框架,提供基础的CRUD操作,为后续功能开发提供数据访问基础。 ## 输出格式 代码示例(语言:Java) ## 约束 - **技术栈限制**: 必须使用MyBatis Plus框架 - **框架约束**: 必须继承BaseMapper获取基础CRUD方法 - **注解约束**: 必须使用MyBatis Plus注解(@TableName、@TableId、@TableField) - **编码规范约束**: 必须遵循阿里巴巴Java开发规范 - **依赖约束**: 必须依赖于REQ-010-1创建的数据库表 ## Rule Set "请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。" **具体规则**: - 必须使用 Canvas 中定义的类名和方法名 - 必须遵循 Canvas 中定义的调用关系 - 必须参考 Canvas 中的流程图逻辑 ## 验收标准 - **功能完整性**: 9个实体类、9个Mapper接口、9个Mapper XML文件创建成功 - **代码规范性**: 代码符合阿里巴巴Java开发规范,有清晰的注释 - **注解正确性**: MyBatis Plus注解使用正确,包括@TableName、@TableId、@TableField - **字段映射正确性**: 实体类字段与数据库表字段一一对应 - **JSON字段处理**: JSON类型字段能够正确序列化和反序列化 - **大字段处理**: TEXT类型大字段使用String类型处理 - **敏感字段保护**: 敏感字段(client_secret、password、security_token)使用@TableField(select = false)注解,默认不查询 - **Lombok使用**: 实体类使用Lombok简化代码,包括@Data、@Builder、@NoArgsConstructor、@AllArgsConstructor - **Mapper接口正确性**: Mapper接口继承BaseMapper,使用@Mapper注解标记 - **XML配置正确性**: XML映射文件namespace和resultType配置正确 ## 风险 - **实体类映射风险**: 实体类字段映射错误可能导致数据读写失败 - **Mapper XML配置风险**: Mapper XML配置错误可能导致SQL执行失败 - **JSON字段处理风险**: JSON类型字段处理不当可能导致数据丢失 - **大字段处理风险**: 大字段处理不当可能导致性能问题 - **框架兼容风险**: MyBatis Plus版本兼容性问题 ## 实现指南 ### 1. 实体类创建 #### 1.1 DataiMetaOrgConfig 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonSerialize; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * Salesforce组织配置实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_org_config") public class DataiMetaOrgConfig implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 组织ID */ @TableField("org_id") private String orgId; /** * 组织名称 */ @TableField("org_name") private String orgName; /** * 实例URL */ @TableField("instance_url") private String instanceUrl; /** * 用户名 */ @TableField("username") private String username; /** * 密码(敏感字段,默认不查询) */ @TableField(value = "password", select = false) private String password; /** * 安全令牌(敏感字段,默认不查询) */ @TableField(value = "security_token", select = false) private String securityToken; /** * 客户端ID */ @TableField("client_id") private String clientId; /** * 客户端密钥(敏感字段,默认不查询) */ @TableField(value = "client_secret", select = false) private String clientSecret; /** * API版本 */ @TableField("api_version") private String apiVersion; /** * 状态 */ @TableField("status") private String status; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; /** * 创建人 */ @TableField("create_by") private String createBy; /** * 更新人 */ @TableField("update_by") private String updateBy; /** * 备注 */ @TableField("remark") private String remark; } ``` #### 1.2 DataiMetaTask 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.databind.JsonNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据任务定义实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_task") public class DataiMetaTask implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 任务名称 */ @TableField("task_name") private String taskName; /** * 任务类型(retrieve/deploy) */ @TableField("task_type") private String taskType; /** * 组织ID */ @TableField("org_id") private String orgId; /** * 元数据类型(ApexClass/ApexTrigger/CustomObject等) */ @TableField("metadata_type") private String metadataType; /** * 元数据组件列表(JSON格式) */ @TableField("component_list") private String componentList; /** * 部署选项(JSON格式) */ @TableField("deploy_options") private String deployOptions; /** * 任务状态(pending/running/completed/failed) */ @TableField("status") private String status; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; /** * 创建人 */ @TableField("create_by") private String createBy; /** * 更新人 */ @TableField("update_by") private String updateBy; /** * 备注 */ @TableField("remark") private String remark; } ``` #### 1.3 DataiMetaPackageItem 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据包项实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_package_item") public class DataiMetaPackageItem implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 任务ID */ @TableField("task_id") private Long taskId; /** * 组件类型 */ @TableField("component_type") private String componentType; /** * 组件API名称 */ @TableField("api_name") private String apiName; /** * 文件路径 */ @TableField("file_path") private String filePath; /** * 文件内容(TEXT类型大字段) */ @TableField("file_content") private String fileContent; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; } ``` #### 1.4 DataiMetaComponent 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据组件实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_component") public class DataiMetaComponent implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 组件类型 */ @TableField("component_type") private String componentType; /** * 组件API名称 */ @TableField("api_name") private String apiName; /** * 组件名称 */ @TableField("component_name") private String componentName; /** * 文件路径 */ @TableField("file_path") private String filePath; /** * 文件内容(TEXT类型大字段) */ @TableField("file_content") private String fileContent; /** * 文件哈希 */ @TableField("file_hash") private String fileHash; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; } ``` #### 1.5 DataiMetaComponentVersion 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据组件版本实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_component_version") public class DataiMetaComponentVersion implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 组件ID */ @TableField("component_id") private Long componentId; /** * 版本号 */ @TableField("version_number") private String versionNumber; /** * 文件路径 */ @TableField("file_path") private String filePath; /** * 文件内容(TEXT类型大字段) */ @TableField("file_content") private String fileContent; /** * 文件哈希 */ @TableField("file_hash") private String fileHash; /** * 创建时间 */ @TableField("create_time") private String createTime; } ``` #### 1.6 DataiMetaJobExecution 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据作业执行实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_job_execution") public class DataiMetaJobExecution implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 任务ID */ @TableField("task_id") private Long taskId; /** * 作业类型(retrieve/deploy) */ @TableField("job_type") private String jobType; /** * 作业状态(pending/running/completed/failed) */ @TableField("status") private String status; /** * 进度百分比 */ @TableField("progress") private Integer progress; /** * 开始时间 */ @TableField("start_time") private String startTime; /** * 结束时间 */ @TableField("end_time") private String endTime; /** * 耗时(毫秒) */ @TableField("duration") private Long duration; /** * 错误信息(TEXT类型大字段) */ @TableField("error_message") private String errorMessage; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; } ``` #### 1.7 DataiMetaDeployHistory 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据部署历史实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_deploy_history") public class DataiMetaDeployHistory implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 任务ID */ @TableField("task_id") private Long taskId; /** * 部署状态(pending/running/completed/failed) */ @TableField("status") private String status; /** * 部署类型(full/quick/destructive) */ @TableField("deploy_type") private String deployType; /** * 开始时间 */ @TableField("start_time") private String startTime; /** * 结束时间 */ @TableField("end_time") private String endTime; /** * 耗时(毫秒) */ @TableField("duration") private Long duration; /** * 错误信息(TEXT类型大字段) */ @TableField("error_message") private String errorMessage; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; } ``` #### 1.8 DataiMetaDeployComponentResult 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据部署组件结果实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_deploy_component_result") public class DataiMetaDeployComponentResult implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 部署历史ID */ @TableField("deploy_history_id") private Long deployHistoryId; /** * 组件类型 */ @TableField("component_type") private String componentType; /** * 组件API名称 */ @TableField("api_name") private String apiName; /** * 部署状态(success/failed) */ @TableField("status") private String status; /** * 错误信息(TEXT类型大字段) */ @TableField("error_message") private String errorMessage; /** * 创建时间 */ @TableField("create_time") private String createTime; /** * 更新时间 */ @TableField("update_time") private String updateTime; } ``` #### 1.9 DataiMetaJobLog 实体类 ```java package com.datai.salesforce.metadata.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 元数据作业日志实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @TableName("datai_meta_job_log") public class DataiMetaJobLog implements Serializable { private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 作业执行ID */ @TableField("job_execution_id") private Long jobExecutionId; /** * 日志级别(INFO/WARN/ERROR) */ @TableField("log_level") private String logLevel; /** * 日志消息(TEXT类型大字段) */ @TableField("log_message") private String logMessage; /** * 日志时间 */ @TableField("log_time") private String logTime; /** * 创建时间 */ @TableField("create_time") private String createTime; } ``` ### 2. Mapper接口创建 #### 2.1 DataiMetaOrgConfigMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaOrgConfig; import org.apache.ibatis.annotations.Mapper; /** * Salesforce组织配置Mapper接口 */ @Mapper public interface DataiMetaOrgConfigMapper extends BaseMapper { } ``` #### 2.2 DataiMetaTaskMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaTask; import org.apache.ibatis.annotations.Mapper; /** * 元数据任务定义Mapper接口 */ @Mapper public interface DataiMetaTaskMapper extends BaseMapper { } ``` #### 2.3 DataiMetaPackageItemMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaPackageItem; import org.apache.ibatis.annotations.Mapper; /** * 元数据包项Mapper接口 */ @Mapper public interface DataiMetaPackageItemMapper extends BaseMapper { } ``` #### 2.4 DataiMetaComponentMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaComponent; import org.apache.ibatis.annotations.Mapper; /** * 元数据组件Mapper接口 */ @Mapper public interface DataiMetaComponentMapper extends BaseMapper { } ``` #### 2.5 DataiMetaComponentVersionMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaComponentVersion; import org.apache.ibatis.annotations.Mapper; /** * 元数据组件版本Mapper接口 */ @Mapper public interface DataiMetaComponentVersionMapper extends BaseMapper { } ``` #### 2.6 DataiMetaJobExecutionMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaJobExecution; import org.apache.ibatis.annotations.Mapper; /** * 元数据作业执行Mapper接口 */ @Mapper public interface DataiMetaJobExecutionMapper extends BaseMapper { } ``` #### 2.7 DataiMetaDeployHistoryMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaDeployHistory; import org.apache.ibatis.annotations.Mapper; /** * 元数据部署历史Mapper接口 */ @Mapper public interface DataiMetaDeployHistoryMapper extends BaseMapper { } ``` #### 2.8 DataiMetaDeployComponentResultMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaDeployComponentResult; import org.apache.ibatis.annotations.Mapper; /** * 元数据部署组件结果Mapper接口 */ @Mapper public interface DataiMetaDeployComponentResultMapper extends BaseMapper { } ``` #### 2.9 DataiMetaJobLogMapper 接口 ```java package com.datai.salesforce.metadata.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.datai.salesforce.metadata.entity.DataiMetaJobLog; import org.apache.ibatis.annotations.Mapper; /** * 元数据作业日志Mapper接口 */ @Mapper public interface DataiMetaJobLogMapper extends BaseMapper { } ``` ### 3. Mapper XML文件创建 #### 3.1 DataiMetaOrgConfigMapper.xml ```xml ``` #### 3.2 DataiMetaTaskMapper.xml ```xml ``` #### 3.3 DataiMetaPackageItemMapper.xml ```xml ``` #### 3.4 DataiMetaComponentMapper.xml ```xml ``` #### 3.5 DataiMetaComponentVersionMapper.xml ```xml ``` #### 3.6 DataiMetaJobExecutionMapper.xml ```xml ``` #### 3.7 DataiMetaDeployHistoryMapper.xml ```xml ``` #### 3.8 DataiMetaDeployComponentResultMapper.xml ```xml ``` #### 3.9 DataiMetaJobLogMapper.xml ```xml ``` ## 使用记录 | 日期 | 使用场景 | 输入参数 | 输出结果 | 反馈 | 改进措施 | |------|---------|---------|---------|------|----------| | 2026-01-19 | 实现基础实体类和Mapper创建功能 | REQ-010-2需求文档,0011-entity-mapper-create ADR文档 | 代码示例和实现指南 | 无 | 无 |