摘要:在开发企业级应用项目业务模块期间,相信很多小伙伴都实现过“记录用户的操作日志”的功能需求,此种方式可以基于Spring AOP的方式加以实现。然后,本文并非介绍如何记录用户的操作日志,而是实现用户在操作某个实体时对比实体对象字段值修改前后是否发生了变化并进行记录。
内容:在企业级应用项目开发过程中,“记录用户的操作日志”这一功能相信很多小伙伴都实现过,然后,有时候产品经理可能会“脑袋一发热”,提了个新的功能需求,即除了记录用户的操作日志之外,还需要重点记录某个实体对象的某些字段在修改前后值是否发生了变化,若发生了变化,则记录到数据库表中用于明细报表的展示。
身为一名资深程序猿/程序媛、或者攻城狮,第一时间心里一般就三个字“mmp”,但是又不能明目张胆地跟人家产品对着干,于是乎,只能硬着头皮网上搜搜开源项目,看看有没有一些大牛实现过。
或许是踩到了狗屎运,果然还真有这样的大牛实现了这种轻量级的开源组件,即Equator,其github的id为“dadiyang”,一位年轻而又爱好分享的大神!
好了,废话不多说,下面,我们用实际的案例进行代码实战吧!
(1)首先,我们需要创建两张数据库表,一张是“实体表”item,其DDL如下所示:
CREATE TABLE `item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL COMMENT '商品名',
`code` varchar(255) DEFAULT NULL COMMENT '商品编号',
`stock` bigint(20) DEFAULT NULL COMMENT '库存',
`purchase_time` date DEFAULT NULL COMMENT '采购时间',
`is_active` int(11) DEFAULT '1' COMMENT '是否有效(1=是;0=否)',
`create_time` datetime DEFAULT NULL,
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='商品表';
另外一张是“日志比较结果记录表”compare_log,其DDL如下所示:
CREATE TABLE `compare_log` (
`id` int(11) NOT NULL,
`code` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`old_val` varchar(255) DEFAULT NULL,
`new_val` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='比较日志';
然后,采用Mybatis逆向工程生成相应的Entity、Mapper、Mapper.xml代码!
(2)下图为 id 为1对应的商品实体对应的各个字段的初始值,我们将以这个商品实体为案例,对其相应的字段进行“更新”,并记录到“比较日志表”中,如下图所示:
更多请见:http://www.mark-to-win.com/tutorial/51034.html