Skip to content

💾 数据持久化 & 持久层

数据库支持

ORM 框架

实体类

  • 所有持久化实体类继承 BaseEntity 基类。

ID编号

多租户

  • 需要区分租户的所有表,均统一使用tenant_id字段。

逻辑删除

乐观锁

自动填充

个性化字段处理

编码规范

  • 分包类名规范:持久层实体类放在 entity 包下,以 Entity 结尾;数据库访问类放在 mapper 包下,以 Mapper 结尾。
  • 注释规范:持久层实体类的注释要完整,特别是哪些字段是关联(外键)、枚举、冗余等等。
  • 操作规范:禁止在 ControllerService 中,直接进行 MyBatis-Plus 操作。原因是:大量 MyBatis 操作散落在 Service 中,会导致 Service 的代码越来乱,无法聚焦业务逻辑。
  • 查询方法命名规范MapperSELECT 查询方法的命名,采用 Spring Data"Query methods"`` 策略,方法名使用 selectBy` 查询条件 规则。
  • 条件构造器规范:优先使用 LambdaQueryWrapper 条件构造器使用方法获得字段名避免手写 `"字段"`` 可能写错的情况。
  • 单表查询规范:简单的单表查询,优先在 Mapper 中通过 default 方法实现。

CRUD 接口

BaseMapperPlus接口,继承 MyBatis-PlusBaseMapper 接口,提供更强的 CRUD 操作能力

数据分页实现

条件构造器

  • 继承 MyBatis-Plus 的条件构造器,拓展了 LambdaQueryWrapperPlusQueryWrapperPlus 类,主要是增加 <xxx>IfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。

Mapper XML

  • 默认配置下,MyBatis Mapper XML 需要写在各自模块resources/mapper 目录下。
  • 尽量避免数据库的连表多表)查询,而是采用多次查询Java 内存拼接的方式替代

字段加密

  • 基于 TypeHandler,基于 Hutool AES 实现字段的解密与解密。
  • 字段加密后只允许使用精准匹配无法使用 模糊匹配
  • 🔑 数据脱敏

动态数据源

分库分表

-🗃️ 读写分离、分库分表