MetaObjectHandler会拦截两次吗
时间: 2024-01-10 12:05:02 浏览: 31
MetaObjectHandler 中的方法会被 MyBatis 在执行数据库操作时多次调用,可能会被拦截多次。
具体来说,MetaObjectHandler 中的方法会被拦截两次,一次是在执行 SQL 语句之前,一次是在执行 SQL 语句之后。这是因为 MyBatis 在执行 SQL 语句之前会先将 Java 对象转换为对应的参数值,然后再将参数值设置到预编译的 SQL 语句中,最后执行 SQL 语句。在这个过程中,MetaObjectHandler 中的方法会被调用两次。
比如在执行一个插入操作时,MyBatis 会先调用 MetaObjectHandler 中的 `insertFill()` 方法,将实体类中的属性值填充到对应的数据库字段中,然后再执行插入操作。插入操作完成之后,MyBatis 会再次调用 MetaObjectHandler 中的 `updateFill()` 方法,将实体类中的更新时间字段填充到对应的数据库字段中。
因此,为了确保 MetaObjectHandler 中的方法能够正常工作,在编写 MetaObjectHandler 时,需要在方法中进行判断,避免重复填充或者覆盖已有的值。同时,如果您需要对不同的操作进行不同的字段填充,可以在方法中根据操作类型进行判断,然后执行相应的逻辑。
相关问题
mybatis拦截为啥进去两次
Mybatis拦截器在执行SQL语句时,可能会被多次调用,这通常是因为Mybatis的工作方式和拦截器的设计有关。具体来说,Mybatis在执行SQL时,会涉及到多个阶段,每个阶段都可能会调用拦截器的方法,因此拦截器可能会被多次调用。
举个例子,当Mybatis执行查询操作时,会依次执行如下阶段:
1. 创建Statement对象
2. 设置Statement参数
3. 执行Statement对象
4. 处理查询结果
在这些阶段中,Mybatis会分别调用拦截器的一些方法,例如创建Statement对象时会调用拦截器的`createStatement`方法,执行Statement对象时会调用拦截器的`query`方法等等。因此,如果你发现拦截器被调用了多次,那么可能是因为Mybatis执行了多个阶段,每个阶段都会调用拦截器的方法。
如果你想避免拦截器被多次调用,可以在拦截器的方法中添加一些逻辑,例如使用一个标记变量来判断是否已经执行过该方法,如果已经执行过则直接返回结果而不再执行。
qiankun会拦截vue-router吗
qiankun是一个微前端解决方案,它本身并不直接拦截vue-router。但是在使用qiankun进行微前端集成时,qiankun会通过劫持Vue的路由配置,实现子应用的路由拦截与管理。
qiankun会在主应用中定义一个`registerMicroApps`方法来注册微应用,并传入微应用的路由配置信息。在主应用中使用`qiankun`加载子应用时,`qiankun`会获取到子应用的路由配置信息,并将其合并到主应用的路由中。这样就实现了主应用与子应用间的路由跳转。
同时,qiankun还提供了一些生命周期钩子方法,用于控制子应用路由的加载和卸载。我们可以在这些钩子方法中执行一些拦截逻辑,例如权限验证、跳转拦截等。通过这种方式,可以在微前端应用中实现对子应用路由的拦截和管理。
总结来说,虽然qiankun本身不会直接拦截vue-router,但在使用qiankun时可以通过劫持Vue的路由配置来实现对子应用路由的拦截与管理。