数据与通用能力
数据访问分层
text
Service
→ Repo
→ Mapper / MyBatis-Plus
→ MySQL实体描述表字段,Mapper 负责 MyBatis 映射,Repo 封装可复用的数据访问方法。简单实体操作可以使用 MyBatis-Plus 能力,复杂联表、权限查询和高频路径应编写明确 SQL。
基础字段
系统实体通常包含:
| 字段 | 作用 |
|---|---|
id | 主键 |
delete_time | 逻辑删除时间 |
deleted | 逻辑删除标记 |
create_time、create_by | 创建审计 |
update_time、update_by | 更新审计 |
审计字段由统一机制填充。逻辑删除扩展会在 MyBatis-Plus 删除操作时无感写入 delete_time,业务代码不需要逐个手工更新。
状态和字典值
- 通用状态使用字符串值:
1-启用、2-禁用。 - 性别使用整数:
0-未知、1-男性、2-女性。 - 资源类型使用整数:
1-菜单、2-页面、3-按钮、4-接口、5-分组。 - 布尔语义字段使用 Boolean,例如
visible、is_link、is_used。
后端 DTO 使用枚举校验,前端使用常量映射;不要在页面中散落无说明的魔法值。
通用查询条件
通用查询允许客户端按三段式规则表达简单条件:
text
propertyName:op:value安全边界包括:
propertyName必须是当前查询对象的真实 Java 属性。- 不允许静态字段、合成字段和查询条件容器字段。
- 操作符必须来自后端允许列表。
- 值通过 MyBatis 参数机制处理,不直接拼接为可执行 SQL。
复杂筛选应增加专用 Query DTO 和 Mapper SQL,不建议不断扩张通用条件语法。
索引与唯一性
唯一性需要数据库约束和应用提示共同保证。设计索引时重点检查:
- 高频等值查询字段。
- 关联表两端外键字段。
- 逻辑删除条件与业务唯一键的组合。
- 用户名、角色编码、资源权限标识、App 账号等身份字段。
不要为低选择性布尔字段单独增加大量索引;索引是否有效应结合真实查询和执行计划判断。