用审计字段+历史表实现可追溯:主表加created_by/created_time/updated_by/updated_time四字段,历史表存操作类型、前后JSON数据、操作人及时机;Service层统一拦截记录,查询时对比差异返回变更字段。

不依赖第三方框架也能做好修改记录,关键是把“谁、什么时候、改了什么”这三个信息存下来。最稳妥的方式是业务表加审计字段 + 单独建历史表,既不影响主表查询性能,又能完整还原每次变更。
在需要追踪的业务表(比如 user_info)里加四列:
datetime(3) 或 timestamp,支持毫秒)这些字段用于快速定位最新状态和责任人,但不记录每次修改的快照——那是历史表的事。
为每个需审计的主表建一张对应的历史表,例如 user_info_history,结构包含:
立即学习“Java免费学习笔记(深入)”;
INSERT / UPDATE / DELETE
用 JSON 存前后数据,灵活兼容字段变更;不用每字段拆成列,避免历史表随主表频繁 DDL。
不要在每个 DAO 或 Controller 里手写 insert history,而是封装一个通用方法。例如:
User old = userMapper.selectById(id)
userMapper.updateById(user)
saveHistory(id, "UPDATE", old.toJson(), user.toJson(), userId, now)
删除和新增同理。可以抽成 AuditService,配合 Spring AOP 或模板方法进一步解耦,但起步阶段手动调用已足够清晰可控。
前端常要“看某条记录的所有修改轨迹”,后端接口返回示例结构:
[{"version": 1, "time": "2024-05-01 10:22:33.123", "by": "admin", "change": {"name": ["张三", "张小三"], "email": ["old@x.com", "new@x.com"]}}, ...]实际组装时,从 history 表按 main_id + operate_time 排序查出所有记录,再用 JSON 工具(如 Jackson)对比 before_data 和 after_data 的差异字段,只返回真正变化的 key-value 对,避免传输冗余数据。
基本上就这些。不复杂但容易忽略的是:历史表要定期归档(比如按月分区),以及 JSON 字段记得建好索引(MySQL 8.0+ 支持 JSON 列路径索引),不然查得慢。
以上就是在Java中如何追踪数据修改历史_修改记录模块设计的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号