miemie 5 年之前
父节点
当前提交
d9f69d59c9

+ 21 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/optimisticlocker/Entity.java

@@ -0,0 +1,21 @@
+package com.baomidou.mybatisplus.test.optimisticlocker;
+
+import com.baomidou.mybatisplus.annotation.Version;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author miemie
+ * @since 2020-06-24
+ */
+@Data
+@Accessors(chain = true)
+public class Entity {
+
+    private Long id;
+
+    private String name;
+
+    @Version
+    private Integer version;
+}

+ 10 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/optimisticlocker/EntityMapper.java

@@ -0,0 +1,10 @@
+package com.baomidou.mybatisplus.test.optimisticlocker;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author miemie
+ * @since 2020-06-24
+ */
+public interface EntityMapper extends BaseMapper<Entity> {
+}

+ 77 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/optimisticlocker/OptimisticLockerTest.java

@@ -0,0 +1,77 @@
+package com.baomidou.mybatisplus.test.optimisticlocker;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.test.BaseDbTest;
+import org.apache.ibatis.plugin.Interceptor;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author miemie
+ * @since 2020-06-24
+ */
+public class OptimisticLockerTest extends BaseDbTest<EntityMapper> {
+
+    @Test
+    void test() {
+        doTestAutoCommit(m -> {
+            Entity entity = new Entity().setId(1L).setName("老王");
+            int updateById = m.updateById(entity);
+            assertThat(updateById).as("更新成功").isEqualTo(1);
+
+            entity = m.selectById(1L);
+            assertThat(entity.getVersion()).as("因为没给version赋值就没走插件").isEqualTo(0);
+
+            updateById = m.updateById(entity);
+            assertThat(updateById).as("更新成功").isEqualTo(1);
+
+            entity = m.selectById(1L);
+            assertThat(entity.getVersion()).as("因为version有值就走了插件").isEqualTo(1);
+        });
+
+
+        doTestAutoCommit(m -> {
+            int update = m.update(new Entity().setName("老王"), Wrappers.<Entity>query().eq("id", 2));
+            assertThat(update).as("更新成功").isEqualTo(1);
+
+            Entity entity = m.selectById(2L);
+            assertThat(entity.getVersion()).as("因为没给version赋值就没走插件").isEqualTo(0);
+
+            update = m.update(new Entity().setName("老王").setVersion(0), Wrappers.<Entity>query().eq("id", 2));
+            assertThat(update).as("更新成功").isEqualTo(1);
+
+            entity = m.selectById(2L);
+            assertThat(entity.getVersion()).as("因为version有值就走了插件").isEqualTo(1);
+        });
+    }
+
+    @Override
+    protected List<Interceptor> interceptors() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+        return Collections.singletonList(interceptor);
+    }
+
+    @Override
+    protected String tableDataSql() {
+        return "insert into entity (id,name) values (1,'1'),(2,'2'),(3,'3')";
+    }
+
+    @Override
+    protected List<String> tableSql() {
+        return Arrays.asList("drop table if exists entity",
+            "CREATE TABLE IF NOT EXISTS entity (\n" +
+                "id BIGINT(20) NOT NULL,\n" +
+                "name VARCHAR(30) NULL DEFAULT NULL,\n" +
+                "version integer not NULL default 0,\n" +
+                "PRIMARY KEY (id)" +
+                ")");
+    }
+}