Pārlūkot izejas kodu

增加存储过程测试用例.

nieqiuqiu 6 gadi atpakaļ
vecāks
revīzija
2bcf1227d0

+ 14 - 14
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/AbstractSqlParserHandler.java

@@ -53,21 +53,21 @@ public abstract class AbstractSqlParserHandler {
             Object originalObject = metaObject.getOriginalObject();
             StatementHandler statementHandler = PluginUtils.realTarget(originalObject);
             metaObject = SystemMetaObject.forObject(statementHandler);
-            // 好像不用判断也行,为了保险起见,还是加上吧.
-            boolean hasProperty = metaObject.hasGetter("delegate");
-            if (hasProperty) {
-                statementHandler = (StatementHandler) metaObject.getValue("delegate");
+
+            if (null != this.sqlParserFilter && this.sqlParserFilter.doFilter(metaObject)) {
+                return;
             }
-            if (!CallableStatementHandler.class.equals(statementHandler.getClass())) {
-                if (null != this.sqlParserFilter && this.sqlParserFilter.doFilter(metaObject)) {
-                    return;
-                }
-                // SQL 解析
-                if (CollectionUtils.isNotEmpty(this.sqlParserList)) {
-                    // @SqlParser(filter = true) 跳过该方法解析
-                    if (SqlParserHelper.getSqlParserInfo(metaObject)) {
-                        return;
-                    }
+
+            // @SqlParser(filter = true) 跳过该方法解析
+            if (SqlParserHelper.getSqlParserInfo(metaObject)) {
+                return;
+            }
+
+            // SQL 解析
+            if (CollectionUtils.isNotEmpty(this.sqlParserList)) {
+                // 好像不用判断也行,为了保险起见,还是加上吧.
+                statementHandler = metaObject.hasGetter("delegate") ? (StatementHandler) metaObject.getValue("delegate") : statementHandler;
+                if (!(statementHandler instanceof CallableStatementHandler)) {
                     // 标记是否修改过 SQL
                     int flag = 0;
                     String originalSql = (String) metaObject.getValue(PluginUtils.DELEGATE_BOUNDSQL_SQL);

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

@@ -142,9 +142,6 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
         StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
         MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
 
-        // SQL 解析
-        this.sqlParser(metaObject);
-    
         // 先判断是不是SELECT操作  (2019-04-10 00:37:31 跳过存储过程)
         MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
         if (SqlCommandType.SELECT != mappedStatement.getSqlCommandType()
@@ -152,6 +149,9 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
             return invocation.proceed();
         }
 
+        // SQL 解析
+        this.sqlParser(metaObject);
+    
         // 针对定义了rowBounds,做为mapper接口方法的参数
         BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
         Object paramObj = boundSql.getParameterObject();

+ 5 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserMapperTest.java

@@ -145,6 +145,11 @@ class H2UserMapperTest extends BaseTest {
         Assertions.assertTrue(CollectionUtils.isNotEmpty(userMapper.selectMaps(new QueryWrapper<>(new H2User().setTestType(3)))));
     }
 
+    @Test
+    void testCall(){
+        Assertions.assertEquals("1",userMapper.testCall());
+    }
+
     @Test
     @Order(Integer.MAX_VALUE)
     void delete() {

+ 7 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2UserMapper.java

@@ -19,9 +19,11 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Options;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.mapping.StatementType;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.test.h2.entity.H2Addr;
@@ -94,4 +96,9 @@ public interface H2UserMapper extends SuperMapper<H2User> {
 
     @Select("select * from h2user")
     List<Map<?,?>> mySelectMaps();
+
+    @Select("call 1")
+    @Options(statementType = StatementType.CALLABLE)
+    String testCall();
+
 }