浏览代码

ISqlRunner支持selectPage,附加其他小修改.

nieqiuqiu 5 年之前
父节点
当前提交
e6d08051cc

+ 2 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/assist/ISqlRunner.java

@@ -37,6 +37,7 @@ public interface ISqlRunner {
     String COUNT = "com.baomidou.mybatisplus.core.mapper.SqlRunner.Count";
     String COUNT = "com.baomidou.mybatisplus.core.mapper.SqlRunner.Count";
     String SQL_SCRIPT = "${sql}";
     String SQL_SCRIPT = "${sql}";
     String SQL = "sql";
     String SQL = "sql";
+    String PAGE = "page";
 
 
     boolean insert(String sql, Object... args);
     boolean insert(String sql, Object... args);
 
 
@@ -54,8 +55,5 @@ public interface ISqlRunner {
 
 
     Map<String, Object> selectOne(String sql, Object... args);
     Map<String, Object> selectOne(String sql, Object... args);
 
 
-    @Deprecated
-    default IPage<Map<String, Object>> selectPage(IPage<?> page, String sql, Object... args) {
-        return null;
-    }
+    IPage<Map<String, Object>> selectPage(IPage<?> page, String sql, Object... args);
 }
 }

+ 1 - 7
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfoHelper.java

@@ -292,13 +292,7 @@ public class TableInfoHelper {
      * @return true 为存在 @TableId 注解;
      * @return true 为存在 @TableId 注解;
      */
      */
     public static boolean isExistTableId(List<Field> list) {
     public static boolean isExistTableId(List<Field> list) {
-        for (Field field : list) {
-            TableId tableId = field.getAnnotation(TableId.class);
-            if (tableId != null) {
-                return true;
-            }
-        }
-        return false;
+        return list.stream().anyMatch(field -> field.isAnnotationPresent(TableId.class));
     }
     }
 
 
     /**
     /**

+ 35 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/metadata/TableInfoHelperTest.java

@@ -0,0 +1,35 @@
+package com.baomidou.mybatisplus.core.metadata;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+class TableInfoHelperTest {
+
+    @Data
+    private static class ModelOne {
+
+        @TableId
+        private Long id;
+
+        private String name;
+    }
+
+    @Data
+    private static class ModelTwo {
+
+        private Long id;
+
+        private String name;
+    }
+
+    @Test
+    void testIsExistTableId() {
+        Assertions.assertTrue(TableInfoHelper.isExistTableId(Arrays.asList(ModelOne.class.getDeclaredFields())));
+        Assertions.assertFalse(TableInfoHelper.isExistTableId(Arrays.asList(ModelTwo.class.getDeclaredFields())));
+    }
+
+}

+ 11 - 12
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java

@@ -54,6 +54,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Properties;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 分页拦截器
  * 分页拦截器
@@ -129,18 +130,16 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
     }
     }
 
 
     private static List<OrderByElement> addOrderByElements(List<OrderItem> orderList, List<OrderByElement> orderByElements) {
     private static List<OrderByElement> addOrderByElements(List<OrderItem> orderList, List<OrderByElement> orderByElements) {
-        if (orderByElements == null || orderByElements.isEmpty()) {
-            orderByElements = new ArrayList<>(orderList.size());
-        }
-        for (OrderItem item : orderList) {
-            if (StringUtils.isEmpty(item.getColumn())) {
-                continue;
-            }
-            OrderByElement element = new OrderByElement();
-            element.setExpression(new Column(item.getColumn()));
-            element.setAsc(item.isAsc());
-            orderByElements.add(element);
-        }
+        orderByElements = CollectionUtils.isEmpty(orderByElements) ? new ArrayList<>(orderList.size()) : orderByElements;
+        List<OrderByElement> orderByElementList = orderList.stream()
+            .filter(item -> StringUtils.isNotEmpty(item.getColumn()))
+            .map(item -> {
+                OrderByElement element = new OrderByElement();
+                element.setExpression(new Column(item.getColumn()));
+                element.setAsc(item.isAsc());
+                return element;
+            }).collect(Collectors.toList());
+        orderByElements.addAll(orderByElementList);
         return orderByElements;
         return orderByElements;
     }
     }
 
 

+ 25 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlRunner.java

@@ -113,6 +113,21 @@ public class SqlRunner implements ISqlRunner {
         return sqlMap;
         return sqlMap;
     }
     }
 
 
+    /**
+     * 获取sqlMap参数
+     *
+     * @param sql  指定参数的格式: {0}, {1}
+     * @param page 分页模型
+     * @param args 仅支持String
+     * @return ignore
+     */
+    private Map<String, Object> sqlMap(String sql, IPage page, Object... args) {
+        Map<String, Object> sqlMap = new HashMap<>();
+        sqlMap.put(PAGE, page);
+        sqlMap.put(SQL, StringUtils.sqlArgsFill(sql, args));
+        return sqlMap;
+    }
+
     @Transactional
     @Transactional
     @Override
     @Override
     public boolean update(String sql, Object... args) {
     public boolean update(String sql, Object... args) {
@@ -188,6 +203,16 @@ public class SqlRunner implements ISqlRunner {
         return SqlHelper.getObject(log, selectList(sql, args));
         return SqlHelper.getObject(log, selectList(sql, args));
     }
     }
 
 
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    @Override
+    public IPage<Map<String, Object>> selectPage(IPage page, String sql, Object... args) {
+        if (null == page) {
+            return null;
+        }
+        page.setRecords(sqlSession().selectList(SELECT_LIST, sqlMap(sql, page, args)));
+        return page;
+    }
+
     /**
     /**
      * 获取Session 默认自动提交
      * 获取Session 默认自动提交
      */
      */

+ 12 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/SqlRunnerTest.java

@@ -16,7 +16,9 @@
 package com.baomidou.mybatisplus.test.h2;
 package com.baomidou.mybatisplus.test.h2;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
 import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
 import com.baomidou.mybatisplus.test.h2.entity.H2Student;
 import com.baomidou.mybatisplus.test.h2.entity.H2Student;
 import com.baomidou.mybatisplus.test.h2.service.IH2StudentService;
 import com.baomidou.mybatisplus.test.h2.service.IH2StudentService;
@@ -72,4 +74,14 @@ class SqlRunnerTest {
             Assertions.assertTrue(CollectionUtils.isEmpty(list));
             Assertions.assertTrue(CollectionUtils.isEmpty(list));
         }
         }
     }
     }
+
+    @Test
+    void testSelectPage() {
+        IPage page1 = SqlRunner.db().selectPage(new Page(1, 3), "select * from h2student");
+        Assertions.assertEquals(page1.getRecords().size(), 3);
+        IPage page2 = SqlRunner.db().selectPage(new Page(1, 3), "select * from h2student where id >= {0}", 0);
+        Assertions.assertEquals(page2.getRecords().size(), 3);
+        IPage page3 = SqlRunner.db().selectPage(new Page(1, 3), "select * from h2student where id = {0}", 10086);
+        Assertions.assertEquals(page3.getRecords().size(), 0);
+    }
 }
 }