当前位置: 首页 > news >正文

智契通项目开发周记(第二周):数据库建模与代码生成器集成

一、 本周工作概述

如果说第一周是绘制蓝图,那么第二周就是正式“打桩”。本周的核心任务是从架构设计走向具体的数据模型落地

基于《智契通项目总体架构设计》文档中的核心能力,我重点完成了以下工作:

  1. 数据库建模:根据业务需求,设计了用户、合同核心、模板管理等关键数据表结构。
  2. 工程化落地:利用MyBatis-Plus代码生成器(Code Generator),一键生成了Entity、Mapper、Service、Controller层的基础代码。
  3. 基础验证:通过Knife4j接口文档对生成的代码进行了初步的连通性测试。
二、 数据库设计:业务逻辑的物理落地

在架构设计阶段,我们规划了contract-core(合同核心数据)和contract-user(用户权限)模块。本周我将这些逻辑模型转化为物理模型(MySQL 8.0)。

1. 核心表设计思路

  • 用户表 (user):存储系统用户信息,包含用户名、加密密码、角色标识(RBAC基础)。
  • 合同主表 (contract_info):这是系统的核心。
    • 字段考量:除了基础的title(标题)、status(状态)外,重点设计了content(合同原文)和structured_data(结构化JSON)。考虑到合同文本可能较长,content字段设计为LONGTEXT类型。
    • 版本控制:预留了parent_id(父版本ID)字段,为后续实现“多版本对比与历史追溯”模块做铺垫。
  • 模板表 (contract_template):存储预置的劳动合同、租赁合同等模板。设计了category(分类)和variables(变量字段JSON)以支持动态填充。

2. 设计规范

  • 严格遵循阿里Java开发手册规范,表名使用小写和下划线。
  • 所有表均包含create_timeupdate_time字段,满足审计日志需求。
三、 代码生成器集成

为了避免繁琐的手动编写Setter/Getter和基础SQL,我利用Spring Boot生态中强大的MyBatis-Plus代码生成器进行了自动化开发。

1. 配置策略
编写了CodeGenerator类,配置了以下策略:

  • 数据源:指向本地MySQL数据库。
  • 全局策略:开启Swagger2注解支持(配合Knife4j),开启Lombok模型(减少模板代码)。
  • 包策略:自动将代码生成到com.zhiqitong.contract-core模块下。

2. 生成效果
运行生成器后,针对contract_info表,自动生成了以下文件:

  • ContractInfo.java(Entity):包含Swagger字段说明注解。
  • ContractInfoMapper.java&xml:包含基础的CRUD方法。
  • ContractInfoService.java&Impl:业务逻辑接口与实现。
  • ContractInfoController.java:RESTful风格的API接口。

3. 技术价值
这一步虽然看似只是“工具使用”,但实际上确立了团队的代码规范。所有团队成员后续生成的代码都将遵循相同的风格(如统一的异常处理封装、统一的响应格式BaseResponse),极大地降低了代码Review的成本。

四、 前端基础页面搭建

在后端代码生成后,前端也同步进行了基础页面的搭建,以验证接口连通性。

  • 页面结构:基于第一周的BasicLayout,创建了ContractList.vue页面。
  • API对接:利用api目录下的自动生成脚本(或手动编写简易调用),测试了GET /contract/list接口。
  • 组件化:使用Element Plus的el-table组件渲染合同列表,目前虽无复杂样式,但已跑通了从数据库到页面的完整链路。
http://www.jsqmd.com/news/660529/

相关文章:

  • OpenClaw 安全机制全景解析
  • YOLOv5特征融合实战:用PANet搞定多尺度目标检测(以无人机图像为例)
  • 别再乱用正态分布初始化了!PyTorch中nn.init.trunc_normal_()的保姆级教程与实战避坑
  • 探讨2026年AI搜索优化公司怎么收费,了解费用选高性价比企业 - 工业设备
  • golang如何编写DNS查询工具_golang DNS查询工具编写大全
  • 支持小程序+H5的CRM源码来了!帮企CRM基于ThinkPHP+Uniapp,开源无加密,适合二次开发
  • 净菜配送选择指南,讲讲哪家公司更值得选? - mypinpai
  • 从理论到调参:深入理解Toad中决策树与卡方分箱的差异与选择
  • 告别“马赛克”分割:用DeepLab-v3+和Xception架构搞定Cityscapes街景语义分割(附PyTorch代码)
  • D2DX终极指南:5步让暗黑破坏神2在现代电脑上焕然一新的完整教程
  • 别再只用BERT了!用sentence-transformers库的SBERT,5分钟搞定文本相似度匹配
  • ROFL-Player终极指南:免费英雄联盟回放分析工具完整教程
  • 英雄联盟智能助手:从繁琐操作到流畅体验的自动化革命
  • 如何选择适合自己的跨境独立站平台、2026七大主流选择推荐 - 速递信息
  • RexUniNLU零样本NLP系统参数详解:temperature/top_k对输出影响分析
  • Python测试框架如何处理重载_在pytest中使用mocker控制调用
  • CardEditor:桌游设计师的批处理卡牌生成神器,让创意批量落地
  • 5分钟彻底解放你的音乐库:Unlock Music终极解密指南
  • 如何快速搭建智能QQ机器人:Go-CQHTTP新手入门完全指南
  • AirPodsDesktop终极指南:如何在Windows上完整体验苹果耳机的原生功能
  • AirPodsDesktop技术评测:填补Windows蓝牙音频生态空白的技术实现方案
  • 性价比高的砌筑砂浆厂怎么选,盘点附近厂家直销与隔音砂浆厂排名 - 工业品网
  • 软件利益相关者管理中的期望管理者
  • 别再死记硬背了!用5分钟动画图解SpringMVC的Model数据流转(附源码)
  • Minecraft启动报错OpenGL版本过低?别急着换显卡,试试这个驱动升级保姆级教程
  • Simple Clock:你的全天候时间管家,如何用开源工具重塑高效生活?
  • PCtoLCD2002取模配置详解:针对SSD1306/SSH1106 OLED的避坑指南与效率优化
  • 探寻服务好的不锈钢编织外层水用金属软管厂家,哪家比较靠谱 - myqiye
  • 拆解对比:Holtek BS45F3833 vs 传统方案,为什么它能成为超声波雾化行业新标杆?
  • 从双人成行到本地多人:手把手教你用Unity的PlayerInput Manager搞定多玩家输入分配