Pārlūkot izejas kodu

saveOrUpdate 不存在推荐使用,在多线程并发下建议先查询后处理,间隙锁问题

hubin 1 gadu atpakaļ
vecāks
revīzija
a45256153b

+ 7 - 12
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/IService.java

@@ -651,22 +651,17 @@ public interface IService<T> {
      * 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
      * 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
      * 此次修改主要是减少了此项业务代码的代码量(存在性验证之后的saveOrUpdate操作)
      * 此次修改主要是减少了此项业务代码的代码量(存在性验证之后的saveOrUpdate操作)
      * </p>
      * </p>
-     *
-     * @param entity 实体对象
-     */
-    default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {
-        return update(entity, updateWrapper) || saveOrUpdate(entity);
-    }
-
-    /**
      * <p>
      * <p>
-     * 根据updateWrapper尝试更新,否继续执行save(T)方法
-     * 此次修改主要是减少了此项业务代码的代码量(存在性验证之后的save操作)
+     * 该方法不推荐在多线程并发下使用,并发可能存在间隙锁的问题,可以采用先查询后判断是否更新或保存。
+     * </p>
+     * <p>
+     * 该方法存在安全隐患将在后续大版本删除
      * </p>
      * </p>
      *
      *
      * @param entity 实体对象
      * @param entity 实体对象
      */
      */
-    default boolean updateOrSave(Wrapper<T> updateWrapper, T entity) {
-        return update(updateWrapper) || save(entity);
+    @Deprecated
+    default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {
+        return update(entity, updateWrapper) || saveOrUpdate(entity);
     }
     }
 }
 }