Browse Source

Merge pull request #196 from baomidou/dev

Dev
qmdx 7 years ago
parent
commit
43f858a0cd
30 changed files with 746 additions and 124 deletions
  1. 0 1
      CHANGELOG.md
  2. 2 2
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisDefaultParameterHandler.java
  3. 9 6
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapperAnnotationBuilder.java
  4. 1 3
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapperRegistry.java
  5. 2 3
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisXMLConfigBuilder.java
  6. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java
  7. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjAndVersionAndOptLockTest.java
  8. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjectHandlerTest.java
  9. 485 0
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2MvcCaseTest.java
  10. 55 0
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2Pagination4SqlTest.java
  11. 4 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserAddrJoinTest.java
  12. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserAutoincrementTest.java
  13. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserDateVersionTest.java
  14. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserExtendsTest.java
  15. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserNoOptLockTest.java
  16. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserNoVersionTest.java
  17. 2 7
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java
  18. 1 0
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2uuidTest.java
  19. 13 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/base/H2Test.java
  20. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/plugins/paginationInterceptor/PaginationInterceptorTest.java
  21. 1 4
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/TenantSqlTest.java
  22. 75 0
      mybatis-plus-core/src/test/resources/h2/spring-test-h2-mvc.xml
  23. 15 2
      mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java
  24. 1 1
      mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java
  25. 4 1
      mybatis-plus-generate/src/main/resources/templates/entity.kt.vm
  26. 1 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java
  27. 2 2
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/SqlHelper.java
  28. 2 2
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/plugins/Page.java
  29. 51 27
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/plugins/pagination/Pagination.java
  30. 2 2
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlUtils.java

+ 0 - 1
CHANGELOG.md

@@ -13,7 +13,6 @@
 - fix #IGI3H:selectBatchIds 参数改为Collection类型
 - bugfix for logic delete sql injector
 - 添加多个排序字段支持
-- isAsc 改为 ascSort 不忽略 size
 - fixed github #185:2.0.2版本 自增主键 批量插入问题 pr
 - 其他优化
 

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisDefaultParameterHandler.java

@@ -64,8 +64,8 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
     private final TypeHandlerRegistry typeHandlerRegistry;
     private final MappedStatement mappedStatement;
     private final Object parameterObject;
-    private BoundSql boundSql;
-    private Configuration configuration;
+    private final BoundSql boundSql;
+    private final Configuration configuration;
 
     public MybatisDefaultParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
         super(mappedStatement, processBatch(mappedStatement, parameterObject), boundSql);

+ 9 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapperAnnotationBuilder.java

@@ -1,5 +1,5 @@
 /**
- * Copyright 2009-2016 the original author or authors.
+ * Copyright 2009-2017 the original author or authors.
  * <p>
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -108,21 +108,24 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
     private final Set<Class<? extends Annotation>> sqlAnnotationTypes = new HashSet<>();
     private final Set<Class<? extends Annotation>> sqlProviderAnnotationTypes = new HashSet<>();
 
-    private Configuration configuration;
-    private MapperBuilderAssistant assistant;
-    private Class<?> type;
+    private final Configuration configuration;
+    private final MapperBuilderAssistant assistant;
+    private final Class<?> type;
 
     public MybatisMapperAnnotationBuilder(Configuration configuration, Class<?> type) {
-        // TODO 执行父类
+        // 执行父类
         super(configuration, type);
+
         String resource = type.getName().replace('.', '/') + ".java (best guess)";
         this.assistant = new MapperBuilderAssistant(configuration, resource);
         this.configuration = configuration;
         this.type = type;
+
         sqlAnnotationTypes.add(Select.class);
         sqlAnnotationTypes.add(Insert.class);
         sqlAnnotationTypes.add(Update.class);
         sqlAnnotationTypes.add(Delete.class);
+
         sqlProviderAnnotationTypes.add(SelectProvider.class);
         sqlProviderAnnotationTypes.add(InsertProvider.class);
         sqlProviderAnnotationTypes.add(UpdateProvider.class);
@@ -483,7 +486,7 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
                 return buildSqlSourceFromStrings(strings, parameterType, languageDriver);
             } else if (sqlProviderAnnotationType != null) {
                 Annotation sqlProviderAnnotation = method.getAnnotation(sqlProviderAnnotationType);
-                return new ProviderSqlSource(assistant.getConfiguration(), sqlProviderAnnotation);
+                return new ProviderSqlSource(assistant.getConfiguration(), sqlProviderAnnotation, type, method);
             }
             return null;
         } catch (Exception e) {

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

@@ -78,11 +78,9 @@ public class MybatisMapperRegistry extends MapperRegistry {
             boolean loadCompleted = false;
             try {
                 knownMappers.put(type, new MapperProxyFactory<>(type));
-                // It's important that the type is added before the parser is
-                // run
+                // It's important that the type is added before the parser is run
                 // otherwise the binding may automatically be attempted by the
                 // mapper parser. If the type is already known, it won't try.
-
                 // TODO 自定义无 XML 注入
                 MybatisMapperAnnotationBuilder parser = new MybatisMapperAnnotationBuilder(config, type);
                 parser.parse();

+ 2 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisXMLConfigBuilder.java

@@ -64,9 +64,9 @@ import org.apache.ibatis.type.JdbcType;
 public class MybatisXMLConfigBuilder extends BaseBuilder {
 
     private boolean parsed;
-    private XPathParser parser;
+    private final XPathParser parser;
     private String environment;
-    private ReflectorFactory localReflectorFactory = new DefaultReflectorFactory();
+    private final ReflectorFactory localReflectorFactory = new DefaultReflectorFactory();
 
     public MybatisXMLConfigBuilder(Reader reader) {
         this(reader, null, null);
@@ -364,7 +364,6 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
         }
     }
 
-    // TODO 这里需要优化
     private void mapperElement(XNode parent) throws Exception {
         /**
          * 定义集合 用来分类放置mybatis的Mapper与XML 按顺序依次遍历

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.List;
 
 import javax.sql.DataSource;
@@ -21,6 +20,7 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon
 import com.baomidou.mybatisplus.mapper.Condition;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.config.ServiceConfig;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserLogicDelete;
 import com.baomidou.mybatisplus.test.h2.service.IH2UserLogicDeleteService;
@@ -44,12 +44,7 @@ public class H2LogicDeleteTest extends H2Test {
         context.refresh();
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjAndVersionAndOptLockTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
@@ -26,6 +25,7 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon
 import com.baomidou.mybatisplus.mapper.Condition;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.config.DBConfig;
 import com.baomidou.mybatisplus.test.h2.config.MybatisConfigMetaObjOptLockConfig;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserVersionAndLogicDeleteMapper;
@@ -51,12 +51,7 @@ public class H2MetaObjAndVersionAndOptLockTest extends H2Test {
         context.refresh();
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjectHandlerTest.java

@@ -3,7 +3,6 @@ package com.baomidou.mybatisplus.test.h2;
 import java.io.IOException;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.sql.Timestamp;
 import java.util.Calendar;
 
@@ -19,6 +18,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMetaobjMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserMetaObj;
 
@@ -43,12 +43,7 @@ public class H2MetaObjectHandlerTest extends H2Test {
         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2-metaobj.xml");
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 485 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2MvcCaseTest.java

@@ -0,0 +1,485 @@
+package com.baomidou.mybatisplus.test.h2;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import javax.sql.DataSource;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
+import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper;
+import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
+import com.baomidou.mybatisplus.test.h2.service.IH2UserService;
+
+/**
+ * <p>
+ * Mybatis Plus H2 Junit Test
+ * </p>
+ *
+ * @author Caratacus
+ * @date 2017/4/1
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:h2/spring-test-h2-mvc.xml"})
+public class H2MvcCaseTest extends H2Test {
+
+    @Autowired
+    private IH2UserService userService;
+
+    @Autowired
+    H2UserMapper userMapper;
+
+    @BeforeClass
+    public static void initDB() throws SQLException, IOException {
+        @SuppressWarnings("resource")
+        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2-mvc.xml");
+        DataSource ds = (DataSource) context.getBean("dataSource");
+        try (Connection conn = ds.getConnection()) {
+            initData(conn);
+        }
+    }
+
+    @Test
+    public void testInsert() {
+        H2User user = new H2User();
+        user.setAge(1);
+        user.setPrice(new BigDecimal("9.99"));
+        userService.insert(user);
+        Assert.assertNotNull(user.getId());
+        user.setDesc("Caratacus");
+        userService.insertOrUpdate(user);
+        H2User userFromDB = userService.selectById(user.getId());
+        Assert.assertEquals("Caratacus", userFromDB.getDesc());
+    }
+
+    @Test
+    public void testInsertBatch() {
+        userService.insert(new H2User("sanmao", 1));
+        List<H2User> h2Users = new ArrayList<>();
+        for (int i = 0; i < 10; i++) {
+            H2User user = new H2User();
+            user.setAge(1);
+            user.setPrice(new BigDecimal("6" + i));
+            user.setDesc("testBatch" + i);
+            h2Users.add(user);
+        }
+        Assert.assertTrue(userService.insertBatch(h2Users));
+    }
+
+    @Test
+    public void testDelete() {
+        H2User user = new H2User();
+        user.setAge(1);
+        user.setPrice(new BigDecimal("9.99"));
+        userService.insert(user);
+        Long userId = user.getId();
+        Assert.assertNotNull(userId);
+        userService.deleteById(userId);
+        Assert.assertNull(userService.selectById(userId));
+    }
+
+    @Test
+    public void testSelectByid() {
+        Long userId = 101L;
+        Assert.assertNotNull(userService.selectById(userId));
+    }
+
+    @Test
+    public void testSelectOne() {
+        H2User user = new H2User();
+        user.setId(105L);
+        EntityWrapper<H2User> ew = new EntityWrapper<>(user);
+        H2User userFromDB = userService.selectOne(ew);
+        Assert.assertNotNull(userFromDB);
+    }
+
+    @Test
+    public void testSelectList() {
+        H2User user = new H2User();
+        EntityWrapper<H2User> ew = new EntityWrapper<>(user);
+        List<H2User> list = userService.selectList(ew);
+        Assert.assertNotNull(list);
+        Assert.assertNotEquals(0, list.size());
+    }
+
+    @Test
+    public void testSelectPage() {
+        Page<H2User> page = userService.selectPage(new Page<H2User>(1, 3));
+        Assert.assertEquals(3, page.getRecords().size());
+    }
+
+    @Test
+    public void testUpdateByIdOptLock() {
+        Long id = 991L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("991");
+        user.setAge(91);
+        user.setPrice(BigDecimal.TEN);
+        user.setDesc("asdf");
+        user.setTestType(1);
+        user.setVersion(1);
+        userService.insertAllColumn(user);
+
+        H2User userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+
+        userDB.setName("991");
+        userService.updateById(userDB);
+
+        userDB = userService.selectById(id);
+        Assert.assertEquals(2, userDB.getVersion().intValue());
+        Assert.assertEquals("991", userDB.getName());
+    }
+
+    @Test
+    public void testUpdateAllColumnByIdOptLock() {
+        Long id = 997L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("991");
+        user.setAge(91);
+        user.setPrice(BigDecimal.TEN);
+        user.setDesc("asdf");
+        user.setTestType(1);
+        user.setVersion(1);
+        userService.insertAllColumn(user);
+
+        H2User userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+
+        userDB.setName("991");
+        userService.updateAllColumnById(userDB);
+
+        userDB = userService.selectById(id);
+        Assert.assertEquals(2, userDB.getVersion().intValue());
+        Assert.assertEquals("991", userDB.getName());
+
+        userDB.setName("990");
+        userService.updateById(userDB);
+
+        userDB = userService.selectById(id);
+        Assert.assertEquals(3, userDB.getVersion().intValue());
+        Assert.assertEquals("990", userDB.getName());
+    }
+
+    @Test
+    public void testUpdateByEntityWrapperOptLock() {
+        Long id = 1992L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("992");
+        user.setAge(92);
+        user.setPrice(BigDecimal.TEN);
+        user.setDesc("asdf");
+        user.setTestType(1);
+        user.setVersion(1);
+        userService.insertAllColumn(user);
+
+        H2User userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+
+        H2User updUser = new H2User();
+        updUser.setName("999");
+
+        userService.update(updUser, new EntityWrapper<>(userDB));
+
+        userDB = userService.selectById(id);
+        Assert.assertEquals(2, userDB.getVersion().intValue());
+        Assert.assertEquals("999", userDB.getName());
+    }
+
+    @Test
+    public void testUpdateByEntityWrapperOptLockWithoutVersionVal() {
+        Long id = 993L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("992");
+        user.setAge(92);
+        user.setPrice(BigDecimal.TEN);
+        user.setDesc("asdf");
+        user.setTestType(1);
+        user.setVersion(1);
+        userService.insertAllColumn(user);
+
+        H2User userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+
+        H2User updUser = new H2User();
+        updUser.setName("999");
+        userDB.setVersion(null);
+        userService.update(updUser, new EntityWrapper<>(userDB));
+
+        userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+        Assert.assertEquals("999", userDB.getName());
+    }
+
+    @Test
+    public void testUpdateByEntityWrapperNoEntity() {
+        Long id = 998L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("992");
+        user.setAge(92);
+        user.setPrice(BigDecimal.TEN);
+        user.setDesc("asdf");
+        user.setTestType(1);
+        user.setVersion(1);
+        userService.insertAllColumn(user);
+
+        H2User userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+        H2User updateUser = new H2User();
+        updateUser.setName("998");
+        boolean result = userService.update(updateUser, new EntityWrapper<H2User>());
+        Assert.assertTrue(result);
+        userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+        EntityWrapper<H2User> param = new EntityWrapper<>();
+        param.eq("name", "998");
+        List<H2User> userList = userService.selectList(param);
+        Assert.assertTrue(userList.size() > 1);
+    }
+
+    @Test
+    public void testUpdateByEntityWrapperNull() {
+        Long id = 918L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("992");
+        user.setAge(92);
+        user.setPrice(BigDecimal.TEN);
+        user.setDesc("asdf");
+        user.setTestType(1);
+        user.setVersion(1);
+        userService.insertAllColumn(user);
+
+        H2User userDB = userService.selectById(id);
+        Assert.assertEquals(1, userDB.getVersion().intValue());
+        H2User updateUser = new H2User();
+        updateUser.setName("918");
+        updateUser.setVersion(1);
+        Assert.assertTrue(userService.update(updateUser, null));
+        EntityWrapper<H2User> ew = new EntityWrapper<>();
+        int count1 = userService.selectCount(ew);
+        ew.eq("name", "918").eq("version", 1);
+        int count2 = userService.selectCount(ew);
+        List<H2User> userList = userService.selectList(new EntityWrapper<H2User>());
+        for (H2User u : userList) {
+            System.out.println(u);
+        }
+        System.out.println("count1=" + count1 + ", count2=" + count2);
+        Assert.assertTrue(count2 > 0);
+        Assert.assertEquals(count1, count2);
+    }
+
+    @Test
+    public void testUpdateBatch() {
+        List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
+        Map<Long, Integer> userVersionMap = new HashMap<>();
+        for (H2User u : list) {
+            userVersionMap.put(u.getId(), u.getVersion());
+        }
+
+        Assert.assertTrue(userService.updateBatchById(list));
+        list = userService.selectList(new EntityWrapper<H2User>());
+        for (H2User user : list) {
+            Assert.assertEquals(userVersionMap.get(user.getId()) + 1, user.getVersion().intValue());
+        }
+
+    }
+
+    @Test
+    public void testUpdateInLoop() {
+        List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
+        Map<Long, Integer> versionBefore = new HashMap<>();
+        Map<Long, String> nameExpect = new HashMap<>();
+        for (H2User h2User : list) {
+            Long id = h2User.getId();
+            Integer versionVal = h2User.getVersion();
+            versionBefore.put(id, versionVal);
+            String randomName = h2User.getName() + "_" + new Random().nextInt(10);
+            nameExpect.put(id, randomName);
+            h2User.setName(randomName);
+            userService.updateById(h2User);
+        }
+
+        list = userService.selectList(new EntityWrapper<H2User>());
+        for (H2User u : list) {
+            Assert.assertEquals(u.getName(), nameExpect.get(u.getId()));
+            if (u.getVersion() != null)
+                Assert.assertEquals(versionBefore.get(u.getId()) + 1, u.getVersion().intValue());
+        }
+    }
+
+    @Test
+    public void testUpdateAllColumnInLoop() {
+        List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
+        Map<Long, Integer> versionBefore = new HashMap<>();
+        Map<Long, String> nameExpect = new HashMap<>();
+        for (H2User h2User : list) {
+            Long id = h2User.getId();
+            Integer versionVal = h2User.getVersion();
+            versionBefore.put(id, versionVal);
+            String randomName = h2User.getName() + "_" + new Random().nextInt(10);
+            nameExpect.put(id, randomName);
+            h2User.setName(randomName);
+            userService.updateAllColumnById(h2User);
+        }
+
+        list = userService.selectList(new EntityWrapper<H2User>());
+        for (H2User u : list) {
+            Assert.assertEquals(u.getName(), nameExpect.get(u.getId()));
+            Assert.assertEquals(versionBefore.get(u.getId()) + 1, u.getVersion().intValue());
+        }
+    }
+
+    @Test
+    public void testInsertMy() {
+        String name = "自定义insert";
+        int version = 1;
+        int row = userService.myInsert(name, version);
+        Assert.assertEquals(1, row);
+    }
+
+    @Test
+    public void testInsertObjectWithParam() {
+        String name = "自定义insert带Param注解";
+        int version = 1;
+        int row = userService.myInsertWithParam(name, version);
+        Assert.assertEquals(1, row);
+    }
+
+    @Test
+    public void testInsertObjectWithoutParam() {
+        String name = "自定义insert带Param注解";
+        int version = 1;
+        int row = userService.myInsertWithoutParam(name, version);
+        Assert.assertEquals(1, row);
+    }
+
+    @Test
+    public void testUpdateMy() {
+        Long id = 10087L;
+        H2User user = new H2User();
+        user.setId(id);
+        user.setName("myUpdate");
+        user.setVersion(1);
+        userService.insert(user);
+
+        H2User dbUser = userService.selectById(id);
+        Assert.assertNotNull(dbUser);
+        Assert.assertEquals("myUpdate", dbUser.getName());
+
+        Assert.assertEquals(1, userService.myUpdate(id, "updateMy"));
+
+        dbUser = userService.selectById(id);
+        Assert.assertNotNull(dbUser);
+        Assert.assertEquals("updateMy", dbUser.getName());
+        Assert.assertEquals(1, user.getVersion().intValue());
+    }
+
+
+    @Test
+    public void testCondition() {
+        Page<H2User> page = new Page<>(1, 3);
+        Map<String, Object> condition = new HashMap<>();
+        condition.put("test_type", 1);
+        page.setCondition(condition);
+        Page<H2User> pageResult = userService.selectPage(page);
+        for (H2User u : pageResult.getRecords()) {
+            System.out.println(u);
+        }
+        System.out.println(pageResult.getTotal());
+
+    }
+
+
+    @Test
+    public void testEntityWrapperSelectSql() {
+        EntityWrapper<H2User> ew = new EntityWrapper<>();
+        ew.setSqlSelect("test_id as id, name, age");
+        List<H2User> list = userService.selectList(ew);
+        for (H2User u : list) {
+            Assert.assertNotNull(u.getId());
+            Assert.assertNotNull(u.getName());
+            Assert.assertNull(u.getPrice());
+        }
+
+    }
+
+    @Test
+    public void testQueryWithParamInSelectStatement() {
+        Map<String, Object> param = new HashMap<>();
+        String nameParam = "selectStmtParam";
+        param.put("nameParam", nameParam);
+        param.put("ageFrom", 1);
+        param.put("ageTo", 100);
+        List<H2User> list = userService.queryWithParamInSelectStatememt(param);
+        Assert.assertNotNull(list);
+        for (H2User u : list) {
+            Assert.assertEquals(nameParam, u.getName());
+            Assert.assertNotNull(u.getId());
+        }
+    }
+
+    @Test
+    public void testQueryWithParamInSelectStatement4Page() {
+        Map<String, Object> param = new HashMap<>();
+        String nameParam = "selectStmtParam";
+        param.put("nameParam", nameParam);
+        param.put("ageFrom", 1);
+        param.put("ageTo", 100);
+        Page<H2User> page = userService.queryWithParamInSelectStatememt4Page(param, new Page<H2User>(0, 10));
+        Assert.assertNotNull(page.getRecords());
+        for (H2User u : page.getRecords()) {
+            Assert.assertEquals(nameParam, u.getName());
+            Assert.assertNotNull(u.getId());
+        }
+        Assert.assertNotEquals(0, page.getTotal());
+    }
+
+    @Test
+    public void testSelectCountWithParamInSelectItems() {
+        Map<String, Object> param = new HashMap<>();
+        String nameParam = "selectStmtParam";
+        param.put("nameParam", nameParam);
+        param.put("ageFrom", 1);
+        param.put("ageTo", 100);
+        int count = userService.selectCountWithParamInSelectItems(param);
+        Assert.assertNotEquals(0, count);
+    }
+
+    @Test
+    public void testPageWithDollarParamInSelectItems() {
+        Map<String, Object> param = new HashMap<>();
+        String nameParam = "selectStmtParam";
+        param.put("nameParam", nameParam);
+        param.put("ageFrom", 1);
+        param.put("ageTo", 100);
+        Page<H2User> page = new Page<H2User>(0, 10);
+        userMapper.selectUserWithDollarParamInSelectStatememt4Page(param, page);
+        Assert.assertNotEquals(0, page.getTotal());
+
+    }
+
+}

+ 55 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2Pagination4SqlTest.java

@@ -0,0 +1,55 @@
+package com.baomidou.mybatisplus.test.h2;
+
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
+import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper;
+import com.baomidou.mybatisplus.test.h2.entity.persistent.H2Addr;
+
+/**
+ * <p>
+ * 这个方法跟{@link H2UserAddrJoinTest} 一样,
+ * 只是起名为了方便查询自定义分页查询
+ * </p>
+ *
+ * @author Caratacus
+ * @date 2017/4/1
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:h2/spring-test-h2.xml"})
+public class H2Pagination4SqlTest extends H2Test {
+
+    @Autowired
+    private H2UserMapper userMapper;
+
+    @BeforeClass
+    public static void initDB() throws SQLException, IOException {
+        H2UserAddrJoinTest.initDB();
+    }
+
+    @Test
+    public void testJoinTableWithoutPagination() {
+        List<H2Addr> addrList = userMapper.getAddrListByUserId(101L);
+        Assert.assertEquals(5, addrList.size());
+    }
+
+    @Test
+    public void testJoinTableWithPagination() {
+        Page<H2Addr> page = new Page<H2Addr>(0, 3);
+        List<H2Addr> addrList = userMapper.getAddrListByUserIdPage(101L, page);
+        Assert.assertNotEquals("Should have pagination info", 0, page.getTotal());
+        Assert.assertEquals(3, addrList.size());
+    }
+
+}

+ 4 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserAddrJoinTest.java

@@ -19,6 +19,7 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2Addr;
 
@@ -62,7 +63,9 @@ public class H2UserAddrJoinTest extends H2Test {
 
     @Test
     public void testJoinTableWithPagination() {
-        List<H2Addr> addrList = userMapper.getAddrListByUserIdPage(101L, new Page<H2Addr>(0, 3));
+        Page<H2Addr> page = new Page<H2Addr>(0, 3);
+        List<H2Addr> addrList = userMapper.getAddrListByUserIdPage(101L, page);
+        Assert.assertNotEquals("Should have pagination info", 0, page.getTotal());
         Assert.assertEquals(3, addrList.size());
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserAutoincrementTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 
 import javax.sql.DataSource;
 
@@ -18,6 +17,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMetaobjMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserMetaObj;
 import com.baomidou.mybatisplus.test.h2.service.IH2UserMetaobjService;
@@ -46,12 +46,7 @@ public class H2UserAutoincrementTest extends H2Test {
         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2.xml");
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserDateVersionTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
@@ -22,6 +21,7 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserDateVersionMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserDateVersion;
 
@@ -46,12 +46,7 @@ public class H2UserDateVersionTest extends H2Test {
         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2.xml");
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserExtendsTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -23,6 +22,7 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.config.ServiceConfig;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserIntVersionExtendTO;
 import com.baomidou.mybatisplus.test.h2.service.IH2UserExtendsService;
@@ -49,12 +49,7 @@ public class H2UserExtendsTest extends H2Test {
         context.refresh();
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserNoOptLockTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -24,6 +23,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
 import com.baomidou.mybatisplus.test.h2.service.IH2UserService;
 
@@ -48,12 +48,7 @@ public class H2UserNoOptLockTest extends H2Test {
         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2.xml");
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserNoVersionTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -23,6 +22,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserNoVersionMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserNoVersion;
 import com.baomidou.mybatisplus.test.h2.service.IH2UserNoVersionService;
@@ -51,12 +51,7 @@ public class H2UserNoVersionTest extends H2Test {
         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2.xml");
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 2 - 7
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -26,6 +25,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import com.baomidou.mybatisplus.entity.Column;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
 import com.baomidou.mybatisplus.test.h2.service.IH2UserService;
@@ -54,12 +54,7 @@ public class H2UserTest extends H2Test {
         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:h2/spring-test-h2.xml");
         DataSource ds = (DataSource) context.getBean("dataSource");
         try (Connection conn = ds.getConnection()) {
-            String createTableSql = readFile("user.ddl.sql");
-            Statement stmt = conn.createStatement();
-            stmt.execute(createTableSql);
-            stmt.execute("truncate table h2user");
-            executeSql(stmt, "user.insert.sql");
-            conn.commit();
+            initData(conn);
         }
     }
 

+ 1 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2uuidTest.java

@@ -17,6 +17,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
 import com.baomidou.mybatisplus.test.h2.entity.mapper.H2uuidMapper;
 import com.baomidou.mybatisplus.test.h2.entity.persistent.H2uuid;
 

+ 13 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2Test.java → mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/base/H2Test.java

@@ -1,8 +1,9 @@
-package com.baomidou.mybatisplus.test.h2;
+package com.baomidou.mybatisplus.test.h2.base;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
+import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.text.SimpleDateFormat;
@@ -10,6 +11,8 @@ import java.util.Date;
 
 import org.junit.Assert;
 
+import com.baomidou.mybatisplus.test.h2.H2UserNoOptLockTest;
+
 /**
  * <p>
  * Mybatis Plus H2 Junit Test
@@ -32,6 +35,15 @@ public class H2Test {
         }
     }
 
+    public static void initData(Connection conn) throws SQLException, IOException {
+        String createTableSql = readFile("user.ddl.sql");
+        Statement stmt = conn.createStatement();
+        stmt.execute(createTableSql);
+        stmt.execute("truncate table h2user");
+        executeSql(stmt, "user.insert.sql");
+        conn.commit();
+    }
+
     public static String readFile(String filename) {
         StringBuilder builder = new StringBuilder();
         String filePath = H2UserNoOptLockTest.class.getResource("/h2/" + filename).getPath();

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/plugins/paginationInterceptor/PaginationInterceptorTest.java

@@ -70,12 +70,12 @@ public class PaginationInterceptorTest {
         Assert.assertTrue(!result2.getRecords().isEmpty());
         // 没有orderby但是设置了倒叙
         Page<PageUser> page3 = new Page<>(current, size);
-        page3.setAsc(false);
+//        page3.setAsc(false);
         Page<PageUser> result3 = pageUserService.selectPage(page3);
         Assert.assertTrue(!result3.getRecords().isEmpty());
         // 有orderby设置了倒叙
         Page<PageUser> page4 = new Page<>(current, size, "name");
-        page3.setAsc(false);
+//        page3.setAsc(false);
         Page<PageUser> result4 = pageUserService.selectPage(page4);
         Assert.assertTrue(!result4.getRecords().isEmpty());
     }

+ 1 - 4
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/TenantSqlTest.java

@@ -40,10 +40,7 @@ public class TenantSqlTest {
 
             @Override
             public boolean doTableFilter(String tableName) {
-                if ("user".equals(tableName)) {
-                    return true;
-                }
-                return false;
+                return "user".equals(tableName);
             }
         });
     }

+ 75 - 0
mybatis-plus-core/src/test/resources/h2/spring-test-h2-mvc.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns="http://www.springframework.org/schema/beans"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
+
+    <context:component-scan base-package="com.baomidou.mybatisplus.test.h2.service"/>
+
+    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
+        <property name="driverClass" value="org.h2.Driver"/>
+        <property name="url" value="jdbc:h2:mem:test;MODE=mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/>
+        <property name="username" value="sa"/>
+        <property name="password" value=""/>
+    </bean>
+
+    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
+        <property name="dataSource" ref="dataSource"/>
+        <property name="typeAliasesPackage" value="com.baomidou.mybatisplus.test.h2.entity"/>
+        <property name="configuration" ref="mybatisConfig"/>
+        <!-- MP 全局配置注入 -->
+        <property name="globalConfig" ref="globalConfig"/>
+        <property name="plugins">
+            <array>
+                <!-- 分页插件配置 -->
+                <bean id="paginationInterceptor"
+                      class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"/>
+                <bean id="optimisticLockerInterceptor"
+                      class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor">
+                </bean>
+                <bean id="performanceInterceptor"
+                      class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor"/>
+            </array>
+        </property>
+    </bean>
+
+    <bean id="mybatisConfig" class="com.baomidou.mybatisplus.MybatisConfiguration">
+        <property name="mapUnderscoreToCamelCase" value="true"/>
+        <property name="jdbcTypeForNull">
+            <util:constant static-field="org.apache.ibatis.type.JdbcType.NULL"/>
+        </property>
+    </bean>
+
+    <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
+        <!-- 逻辑删除 定义下面3个参数-->
+        <property name="sqlInjector" ref="logicSqlInjector"/>
+        <property name="logicDeleteValue" value="-1"/>
+        <property name="logicNotDeleteValue" value="1"/>
+        <!-- 全局ID类型: 0, "数据库ID自增", 1, "用户输入ID", 2, "全局唯一ID", 3, "全局唯一ID"-->
+        <property name="idType" value="2"/>
+        <!-- 2.1-gamma+ 数据库自动识别,无需配置数据库类型
+        <property name="dbType" value="mysql" />
+        -->
+        <!--主键Sequence-->
+        <!--<property name="keyGenerator" ref="keyGenerator"/>-->
+        <!-- 公共字段填充处理器 -->
+        <property name="metaObjectHandler" ref="myMetaObjectHandler"/>
+        <!--数据库关键字转义符,'desc', "desc" 2.1-gamma+不需要制定-->
+        <!--<property name="identifierQuote" value="'" />-->
+    </bean>
+
+    <!-- 配置oracle主键Sequence, 其他类型数据库,请配置相应的类型-->
+    <!--<bean id="keyGenerator" class="com.baomidou.mybatisplus.incrementer.OracleKeyGenerator"/>-->
+
+    <!-- 自定义处理器 -->
+    <bean id="myMetaObjectHandler" class="com.baomidou.mybatisplus.test.h2.H2MetaObjectHandler"/>
+    <bean id="logicSqlInjector" class="com.baomidou.mybatisplus.mapper.LogicSqlInjector"/>
+
+    <!-- 配置mybatis 扫描mapper接口的路径-->
+    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
+        <property name="basePackage" value="com.baomidou.mybatisplus.test.h2.entity.mapper"/>
+    </bean>
+</beans>

+ 15 - 2
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java

@@ -15,12 +15,12 @@
  */
 package com.baomidou.mybatisplus.generator.config;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.generator.config.po.TableFill;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
 
+import java.util.List;
+
 /**
  * <p>
  * 策略配置项
@@ -51,6 +51,11 @@ public class StrategyConfig {
      */
     private String[] tablePrefix;
 
+    /**
+     * 字段前缀
+     */
+    private String[] fieldPrefix;
+
     /**
      * 自定义继承的Entity类全称,带包名
      */
@@ -386,4 +391,12 @@ public class StrategyConfig {
         this.tableFillList = tableFillList;
         return this;
     }
+
+    public String[] getFieldPrefix() {
+        return fieldPrefix;
+    }
+
+    public void setFieldPrefix(String[] fieldPrefix) {
+        this.fieldPrefix = fieldPrefix;
+    }
 }

+ 1 - 1
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -598,7 +598,7 @@ public class ConfigBuilder {
      * @return 根据策略返回处理后的名称
      */
     private String processName(String name, NamingStrategy strategy) {
-        return processName(name, strategy, null);
+        return processName(name, strategy, this.strategyConfig.getFieldPrefix());
     }
 
     /**

+ 4 - 1
mybatis-plus-generate/src/main/resources/templates/entity.kt.vm

@@ -65,11 +65,14 @@ class ${entity} : Serializable {
 
 
 #if(${entityColumnConstant})
+    companion object {
 #foreach($field in ${table.fields})
 
-    val ${field.name.toUpperCase()} : String = "${field.name}"
+        const val ${field.name.toUpperCase()} : String = "${field.name}"
 
 #end
+    }
+
 #end
 #if(${activeRecord})
     override fun pkVal(): Serializable {

+ 1 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java

@@ -809,7 +809,7 @@ public class AutoSqlInjector implements ISqlInjector {
         if (null != table) {
             String resultMap = table.getResultMap();
             if (null != resultMap) {
-				/* 返回 resultMap 映射结果集 */
+                /* 返回 resultMap 映射结果集 */
                 return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null, resultMap, null,
                         new NoKeyGenerator(), null, null);
             }

+ 2 - 2
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/SqlHelper.java

@@ -194,8 +194,8 @@ public class SqlHelper {
         }
         // 排序
         if (page.isOpenSort()) {
-            wrapper.orderAsc(page.getAsc());
-            wrapper.orderDesc(page.getDesc());
+            wrapper.orderAsc(page.getAscs());
+            wrapper.orderDesc(page.getDescs());
         }
         // MAP 参数查询
         if (MapUtils.isNotEmpty(page.getCondition())) {

+ 2 - 2
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/plugins/Page.java

@@ -56,9 +56,9 @@ public class Page<T> extends Pagination {
         this.setOrderByField(orderByField);
     }
 
-    public Page(int current, int size, String orderByField, boolean ascSort) {
+    public Page(int current, int size, String orderByField, boolean isAsc) {
         this(current, size, orderByField);
-        this.setAscSort(ascSort);
+        this.setAsc(isAsc);
     }
 
     public List<T> getRecords() {

+ 51 - 27
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/plugins/pagination/Pagination.java

@@ -87,21 +87,21 @@ public class Pagination extends RowBounds implements Serializable {
      * SQL 排序 ASC 集合
      * </p>
      */
-    private transient List<String> asc;
+    private transient List<String> ascs;
     /**
      * <p>
      * SQL 排序 DESC 集合
      * </p>
      */
-    private transient List<String> desc;
+    private transient List<String> descs;
 
     /**
      * 是否为升序 ASC( 默认: true )
      *
-     * @see #asc
-     * @see #desc
+     * @see #ascs
+     * @see #descs
      */
-    private transient boolean ascSort = true;
+    private transient boolean isAsc = true;
 
     /**
      * <p>
@@ -111,8 +111,8 @@ public class Pagination extends RowBounds implements Serializable {
      * DESC 表示按倒序排序(即:从大到小排序)<br>
      * ASC 表示按正序排序(即:从小到大排序)
      *
-     * @see #asc
-     * @see #desc
+     * @see #ascs
+     * @see #descs
      * </p>
      */
     private transient String orderByField;
@@ -139,6 +139,8 @@ public class Pagination extends RowBounds implements Serializable {
 
     public Pagination(int current, int size, boolean searchCount, boolean openSort) {
         super(offsetCurrent(current, size), size);
+        setOffset(offsetCurrent(current, size));
+        setLimit(size);
         if (current > 1) {
             this.current = current;
         }
@@ -214,8 +216,8 @@ public class Pagination extends RowBounds implements Serializable {
     }
 
     /**
-     * @see #asc
-     * @see #desc
+     * @see #ascs
+     * @see #descs
      */
     @Deprecated
     public String getOrderByField() {
@@ -223,8 +225,8 @@ public class Pagination extends RowBounds implements Serializable {
     }
 
     /**
-     * @see #asc
-     * @see #desc
+     * @see #ascs
+     * @see #descs
      */
     public Pagination setOrderByField(String orderByField) {
         if (StringUtils.isNotEmpty(orderByField)) {
@@ -242,8 +244,8 @@ public class Pagination extends RowBounds implements Serializable {
         return this;
     }
 
-    public List<String> getAsc() {
-        return orders(ascSort, asc);
+    public List<String> getAscs() {
+        return orders(isAsc, ascs);
     }
 
     private List<String> orders(boolean condition, List<String> columns) {
@@ -258,33 +260,55 @@ public class Pagination extends RowBounds implements Serializable {
         return columns;
     }
 
-    public void setAsc(List<String> asc) {
-        this.asc = asc;
+    public Pagination setAscs(List<String> ascs) {
+        this.ascs = ascs;
+        return this;
     }
 
-    public List<String> getDesc() {
-        return orders(!isAscSort(), desc);
+    public List<String> getDescs() {
+        return orders(!isAsc, descs);
     }
 
-    public void setDesc(List<String> desc) {
-        this.desc = desc;
+    public Pagination setDescs(List<String> descs) {
+        this.descs = descs;
+        return this;
     }
 
     /**
-     * @see #asc
-     * @see #desc
+     * @see #ascs
+     * @see #descs
      */
     @Deprecated
-    public boolean isAscSort() {
-        return ascSort;
+    public boolean isAsc() {
+        return isAsc;
     }
 
     /**
-     * @see #asc
-     * @see #desc
+     * @see #ascs
+     * @see #descs
      */
-    public Pagination setAscSort(boolean ascSort) {
-        this.ascSort = ascSort;
+    public Pagination setAsc(boolean isAsc) {
+        this.isAsc = isAsc;
+        return this;
+    }
+
+    @Override
+    public int getOffset() {
+        return offset;
+    }
+
+    public Pagination setOffset(int offset) {
+        this.offset = offset;
+        return this;
+    }
+
+    @Override
+    public int getLimit() {
+        return limit;
+    }
+
+    public Pagination setLimit(int limit) {
+        this.limit = limit;
         return this;
     }
 

+ 2 - 2
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlUtils.java

@@ -85,8 +85,8 @@ public class SqlUtils {
     public static String concatOrderBy(String originalSql, Pagination page, boolean orderBy) {
         if (orderBy && page.isOpenSort()) {
             StringBuilder buildSql = new StringBuilder(originalSql);
-            String ascStr = concatOrderBuilder(page.getAsc(), " ASC");
-            String descStr = concatOrderBuilder(page.getDesc(), " DESC");
+            String ascStr = concatOrderBuilder(page.getAscs(), " ASC");
+            String descStr = concatOrderBuilder(page.getDescs(), " DESC");
             if (StringUtils.isNotEmpty(ascStr) && StringUtils.isNotEmpty(descStr)) {
                 ascStr += ", ";
             }