当前使用版本(必填,否则不予处理)
3.4.3.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
具体原因不明
重现步骤(如果有就写完整)
实体对象中公共父类有一个更新时间的字段,当调用baseMapper接口中的update方法时,能被自动填充的handler拦截并填充修改时间,但是调用同一个mapper在对应xml文件中手写的update方法时,自动填充的handler并未拦截到所以也没有自动填充该字段。
报错信息
无
Comment From: zhuzhenwen-github
可以通过拦截器的方式实现这个功能,但是需要注意的是,自动填充功能将会被提前执行(一般没什么影响) 步骤1:实现InnerInterceptor接口 步骤2:重写beforeUpdate方法 代码实现流程如下: @Override public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) { final SqlCommandType sqlCommandType = ms.getSqlCommandType(); //判断操作类型 if(SqlCommandType.UPDATE.equals(sqlCommandType)){ MetaObject metaObject = ms.getConfiguration().newMetaObject(parameter); //获取表对象信息(启动的时候,就已经加载好了,放在缓存中的,所以不影响性能) TableInfo tableInfo = TableInfoHelper.getTableInfo(parameter.getClass()); //执行自动填充的功能 GlobalConfigUtils.getMetaObjectHandler(ms.getConfiguration()).ifPresent(metaObjectHandler -> { if (metaObjectHandler.openUpdateFill() && tableInfo.isWithUpdateFill()) { //执行自动填充的更新策略 metaObjectHandler.updateFill(metaObject); } }); } }
Comment From: qmdx
填充不是在sql 编译前,因此你 xml 不需要 if 判断,否则 编译后的 sql 无填充字段