ソースを参照

3x 来一波测试用例

hubin 7 年 前
コミット
dee2833422

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractLambdaWrapper.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.Property;
 import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
 
+import java.io.Serializable;
 import java.util.Map;
 
 /**
@@ -33,7 +34,7 @@ import java.util.Map;
  * @author hubin miemie HCL
  * @since 2017-05-26
  */
-public abstract class AbstractLambdaWrapper<T, This extends AbstractLambdaWrapper<T, This>> extends AbstractWrapper<T, Property<T, ?>, This> {
+public abstract class AbstractLambdaWrapper<T, This extends AbstractLambdaWrapper<T, This>> extends AbstractWrapper<T, Property<T, ?>, This> implements Serializable {
     private Map<String, String> columnMap = null;
     private boolean initColumnMap = false;
 

+ 6 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -36,6 +36,7 @@ import static com.baomidou.mybatisplus.core.enums.SqlKeyword.NOT;
 import static com.baomidou.mybatisplus.core.enums.SqlKeyword.OR;
 import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ORDER_BY;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -64,9 +65,8 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  * @since 2017-05-26
  */
 public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, This>> extends Wrapper<T>
-    implements Compare<This, R>, Nested<This>, Join<This> {
+    implements Compare<This, R>, Nested<This>, Join<This>, Serializable {
 
-    @SuppressWarnings("unchecked")
     protected This typedThis = (This) this;
 
     private static final String MP_GENERAL_PARAMNAME = "MPGENVAL";
@@ -164,8 +164,7 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
      */
     @Override
     public This like(boolean condition, R column, Object val) {
-        return doIt(condition, () -> columnToString(column), LIKE, () -> "\"%\"", () -> formatSql("{0}", val),
-            () -> "\"%\"");
+        return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("CONCAT('%',{0},'%')", val));
     }
 
     /**
@@ -280,6 +279,7 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
     /**
      * EXISTS ( sql 语句 )
      */
+    @Override
     public This exists(boolean condition, String existsSql) {
         return addNestedCondition(condition, existsSql, EXISTS);
     }
@@ -287,10 +287,12 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
     /**
      * NOT EXISTS ( sql 语句 )
      */
+    @Override
     public This notExists(boolean condition, String notExistsSql) {
         return not(condition).exists(condition, notExistsSql);
     }
     //todo 上面的分完了,还剩下面的
+
     /**
      * 字段 IS NULL
      */

+ 3 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/ISqlSegment.java

@@ -16,6 +16,8 @@
 package com.baomidou.mybatisplus.core.conditions;
 
 
+import java.io.Serializable;
+
 /**
  * <p>
  * SQL 片段接口
@@ -25,7 +27,7 @@ package com.baomidou.mybatisplus.core.conditions;
  * @since 2018-05-28
  */
 @FunctionalInterface
-public interface ISqlSegment {
+public interface ISqlSegment extends Serializable {
 
     /**
      * SQL 片段

+ 7 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/Wrapper.java

@@ -17,6 +17,8 @@ package com.baomidou.mybatisplus.core.conditions;
 
 import java.io.Serializable;
 
+import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
+
 /**
  * <p>
  * 条件构造抽象类
@@ -50,5 +52,10 @@ public abstract class Wrapper<T> implements ISqlSegment, Serializable {
         return null;
     }
 
+    @Override
+    public Wrapper<T> clone() {
+        return SerializationUtils.clone(this);
+    }
+
 }
 

+ 3 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Compare.java

@@ -15,6 +15,8 @@
  */
 package com.baomidou.mybatisplus.core.conditions.interfaces;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 查询条件封装
@@ -24,7 +26,7 @@ package com.baomidou.mybatisplus.core.conditions.interfaces;
  * @author hubin miemie HCL
  * @since 2017-05-26
  */
-public interface Compare<This, R> {
+public interface Compare<This, R> extends Serializable {
 
     /**
      * 等于 =

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Join.java

@@ -15,7 +15,7 @@
  */
 package com.baomidou.mybatisplus.core.conditions.interfaces;
 
-import static com.baomidou.mybatisplus.core.enums.SqlKeyword.EXISTS;
+import java.io.Serializable;
 
 /**
  * <p>
@@ -26,7 +26,7 @@ import static com.baomidou.mybatisplus.core.enums.SqlKeyword.EXISTS;
  * @author hubin miemie HCL
  * @since 2017-05-26
  */
-public interface Join<This> {
+public interface Join<This> extends Serializable {
 
     /**
      * 拼接 AND

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Nested.java

@@ -15,6 +15,7 @@
  */
 package com.baomidou.mybatisplus.core.conditions.interfaces;
 
+import java.io.Serializable;
 import java.util.function.Function;
 
 /**
@@ -26,7 +27,7 @@ import java.util.function.Function;
  * @author hubin miemie HCL
  * @since 2017-05-26
  */
-public interface Nested<This> {
+public interface Nested<This> extends Serializable {
 
     /**
      * AND 嵌套

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/select/EntityWrapper.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 
+import java.io.Serializable;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -30,7 +31,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @author hubin miemie HCL
  * @Date 2018-05-25
  */
-public class EntityWrapper<T> extends AbstractWrapper<T, String, EntityWrapper<T>> {
+public class EntityWrapper<T> extends AbstractWrapper<T, String, EntityWrapper<T>> implements Serializable {
 
     /**
      * SQL 查询字段内容,例如:id,name,age

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/select/LambdaEntityWrapper.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.Property;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -36,7 +37,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @author hubin miemie HCL
  * @since 2017-05-26
  */
-public class LambdaEntityWrapper<T> extends AbstractLambdaWrapper<T, LambdaEntityWrapper<T>> {
+public class LambdaEntityWrapper<T> extends AbstractLambdaWrapper<T, LambdaEntityWrapper<T>> implements Serializable {
 
     /**
      * SQL 查询字段内容,例如:id,name,age

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapper.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.Property;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -35,7 +36,7 @@ import static java.util.stream.Collectors.joining;
  * @author hubin miemie HCL
  * @since 2018-05-30
  */
-public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdateWrapper<T>> {
+public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdateWrapper<T>> implements Serializable {
 
     /**
      * SQL 更新字段内容,例如:name='1',age=2

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -34,7 +35,7 @@ import static java.util.stream.Collectors.joining;
  * @author hubin miemie HCL
  * @since 2018-05-30
  */
-public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T>> {
+public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T>> implements Serializable {
 
     /**
      * SQL 更新字段内容,例如:name='1',age=2

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteByMap.java

@@ -34,9 +34,9 @@ public class DeleteByMap extends AbstractMethod {
 
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
-        SqlMethod sqlMethod = SqlMethod.DELETE_BY_ID;
+        SqlMethod sqlMethod = SqlMethod.DELETE_BY_MAP;
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, String.format(sqlMethod.getSql(),
-            tableInfo.getTableName(), tableInfo.getKeyColumn(), tableInfo.getKeyProperty()), modelClass);
+            tableInfo.getTableName(), this.sqlWhereByMap(tableInfo)), modelClass);
         return this.addDeleteMappedStatement(mapperClass, sqlMethod.getMethod(), sqlSource);
     }
 }

+ 46 - 12
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserMapperTest.java

@@ -1,7 +1,12 @@
 package com.baomidou.mybatisplus.test.h2;
 
+import static java.util.stream.Collectors.toList;
+
 import java.io.IOException;
 import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -11,8 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.select.EntityWrapper;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.test.h2.config.H2Db;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
@@ -33,12 +39,12 @@ public class H2UserMapperTest extends BaseTest {
     protected H2UserMapper userMapper;
 
     @BeforeClass
-    public static void aInitDB() throws SQLException, IOException {
+    public static void InitDB() throws SQLException, IOException {
         H2Db.initH2User();
     }
 
     @Test
-    public void bInsert() {
+    public void crudTest() {
         H2User h2User = new H2User();
         h2User.setName(NQQ);
         h2User.setAge(1);
@@ -46,11 +52,43 @@ public class H2UserMapperTest extends BaseTest {
         Assert.assertTrue(1 == userMapper.insert(h2User));
 
         log(h2User.getId());
-    }
 
-    @Test
-    public void cUpdate() {
-        H2User h2User = new H2User();
+        // 新增一条自定义 ID = 1 的测试删除数据
+        h2User.setId(1L);
+        h2User.setName("测试");
+        userMapper.insert(h2User);
+        for (int i = 0; i < 10; i++) {
+            userMapper.insert(new H2User("mp" + i, i));
+        }
+        Assert.assertTrue(1 == userMapper.deleteById(1L));
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("name", "mp0");
+        map.put("age", 0);
+
+        // 根据 map 查询
+        h2User = userMapper.selectByMap(map).get(0);
+        Assert.assertTrue(0 == h2User.getAge());
+
+        // 根据 map 删除
+        Assert.assertTrue(1 == userMapper.deleteByMap(map));
+
+        // 查询列表
+        Wrapper<H2User> wrapper = new EntityWrapper<H2User>().stream().like(H2User::getName, "mp");
+        log(wrapper.getSqlSegment());
+
+        List<H2User> h2UserList = userMapper.selectList(wrapper);
+        Assert.assertTrue(CollectionUtils.isNotEmpty(h2UserList));
+
+        // 查询总数
+        int count = userMapper.selectCount(wrapper.clone());
+        Assert.assertTrue(count > 1);
+
+        // 批量删除
+        Assert.assertTrue(count == userMapper.deleteBatchIds(h2UserList
+            .stream().map(u -> u.getId()).collect(toList())));
+
+        h2User = new H2User();
         h2User.setAge(2);
         Assert.assertTrue(1 == userMapper.update(h2User,
             new EntityWrapper<H2User>().eq("name", NQQ)));
@@ -58,12 +96,8 @@ public class H2UserMapperTest extends BaseTest {
         h2User.setAge(3);
         Assert.assertTrue(1 == userMapper.update(h2User,
             new EntityWrapper<H2User>().stream().eq(H2User::getName, NQQ)));
-    }
 
-    @Test
-    public void dSelectOne() {
-        H2User h2User = userMapper.selectOne(new H2User().setName(NQQ));
-        Assert.assertNotNull(h2User);
+        Assert.assertNotNull(userMapper.selectOne(new H2User().setName(NQQ)));
 
         log(h2User.toString());
     }