何时修改sql :预编译sql (在prepare方法之前添加修改的逻辑)。 可以同时处理sql处理和映射类
准备的xml文件: mybatis-config.xml:
? XML版本=' 1.0 '编码=' utf-8 '? doctypeconfigurationpublic '-//my batis.org//dtd config 3.0//en ' ' http://my batis.org/dtd/my batis-3-config.dtd ' configuration pluginsplugininterceptor='阻止程序的完整包名称'//plugins/configuration @ slf4j @ integer.class}}} publicclassupdatetimeinterceptorimplementsinterceptor { @ overridepublicobjectintercept (invocationintercept ) @ overrrrided able { statementhandlerstatementhandler=(statement handler ) invocation.getTarget ); //先阻止RoutingStatementHandler,其中有语句处理程序类型的delegate变量,其实现类是BaseStatementHandler。 然后,BaseStatementHandler的成员变量mappedstatementmetaobjectmetaobject=meta object.for object (statement handler, systemmetaobject.forobject )去system meta object.default _ object _ wrapper _ factory, new defaultreflectorfactory (mappedstatementmappedstatement=(mapped statement ) meta object.getvalue (delegate.mapped state ) //sql语句类型: UNKNOWN、INSERT、UPDATE、DELETE、SELECT、FLUSH、UPDATE、SqlCommandType为enumstringsqlcommandtype=mappedstype //得到的映射类和SQL object obj=boundsql.getparameter object (; String sql=boundSql.getSql (; 在update语句时包含updateTime变量,如果已覆盖,则包含if (包含sqlcommand type.equals (' update ' ) ) reflectutil.setfieldvalue } @ overridepublicobjectplugin (objecto ) returnplugin.wrap ) o,this ); } @ overridepublicvoidsetproperties (属性属性) }