瀏覽代碼

1. 生成@RestController
2. @RequestMapping 驼峰转连字符

披荆斩棘 8 年之前
父節點
當前提交
a9170d29d4

+ 7 - 0
src/main/java/com/baomidou/mybatisplus/generator/AutoGenerator.java

@@ -151,6 +151,13 @@ public class AutoGenerator extends AbstractGenerator {
                     }
                 }
             }
+            // RequestMapping 连字符风格 user-info
+            if ( config.getStrategyConfig().isControllerMappingHyphenStyle() ) {
+                ctx.put("controllerMappingHyphenStyle", config.getStrategyConfig().isControllerMappingHyphenStyle());
+                ctx.put("controllerMappingHyphen", StringUtils.camelToHyphen( tableInfo.getEntityPath() ));
+            }
+            
+            ctx.put("restControllerStyle", config.getStrategyConfig().isRestControllerStyle());
             ctx.put("package", packageInfo);
             ctx.put("author", config.getGlobalConfig().getAuthor());
             ctx.put("activeRecord", config.getGlobalConfig().isActiveRecord());

+ 30 - 0
src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java

@@ -112,6 +112,20 @@ public class StrategyConfig {
      * 比如 : 数据库字段名称 : 'is_xxx',类型为 : tinyint. 在映射实体的时候则会去掉is,在实体类中映射最终结果为 xxx
      */
     private boolean entityBooleanColumnRemoveIsPrefix = false;
+    /**
+     * 生成 <code>@RestController</code> 控制器
+     * <pre>
+     *      <code>@Controller</code> -> <code>@RestController</code>
+     * </pre>
+     */
+    private boolean restControllerStyle          = false;
+    /**
+     * 驼峰转连字符
+     * <pre>
+     *      <code>@RequestMapping("/managerUserActionHistory")</code> -> <code>@RequestMapping("/manager-user-action-history")</code>
+     * </pre>
+     */
+    private boolean controllerMappingHyphenStyle = false;
    
 
     public void setDbColumnUnderline(boolean dbColumnUnderline) {
@@ -282,4 +296,20 @@ public class StrategyConfig {
     public void setEntityBooleanColumnRemoveIsPrefix ( boolean entityBooleanColumnRemoveIsPrefix ) {
         this.entityBooleanColumnRemoveIsPrefix = entityBooleanColumnRemoveIsPrefix;
     }
+
+    public boolean isRestControllerStyle () {
+        return restControllerStyle;
+    }
+
+    public void setRestControllerStyle ( boolean restControllerStyle ) {
+        this.restControllerStyle = restControllerStyle;
+    }
+
+    public boolean isControllerMappingHyphenStyle () {
+        return controllerMappingHyphenStyle;
+    }
+
+    public void setControllerMappingHyphenStyle ( boolean controllerMappingHyphenStyle ) {
+        this.controllerMappingHyphenStyle = controllerMappingHyphenStyle;
+    }
 }

+ 90 - 5
src/main/java/com/baomidou/mybatisplus/toolkit/StringUtils.java

@@ -15,11 +15,7 @@
  */
 package com.baomidou.mybatisplus.toolkit;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -48,6 +44,10 @@ public class StringUtils {
      */
     public static final String PLACE_HOLDER = "{%s}";
 
+    private static boolean separatorBeforeDigit = false;
+    private static boolean separatorAfterDigit  = true;
+
+
     private StringUtils() {
     }
 
@@ -609,4 +609,89 @@ public class StringUtils {
         }
         return isCharSequence(cls);
     }
+
+    /**
+     * 驼峰转连字符
+     * <pre>
+     *     StringUtils.camelToHyphen( "managerAdminUserService" ) = manager-admin-user-service 
+     * </pre> 
+     * @see <a href="https://github.com/krasa/StringManipulation">document</a>
+     * @param input
+     * @return 以'-'分隔
+     */
+    public static String camelToHyphen(String input) {
+        return wordsToHyphenCase(wordsAndHyphenAndCamelToConstantCase( input ));
+    }
+    
+    private static String wordsAndHyphenAndCamelToConstantCase ( String input ) {
+        boolean _betweenUpperCases = false;
+        boolean containsLowerCase  = containsLowerCase( input );
+
+        StringBuilder buf          = new StringBuilder();
+        char          previousChar = ' ';
+        char[]        chars        = input.toCharArray();
+        for ( int i = 0 ; i < chars.length ; i++ ) {
+            char    c                                 = chars[i];
+            boolean isUpperCaseAndPreviousIsUpperCase = ( Character.isUpperCase( previousChar ) ) && ( Character.isUpperCase(
+                    c ) );
+            boolean isUpperCaseAndPreviousIsLowerCase = ( Character.isLowerCase( previousChar ) ) && ( Character.isUpperCase(
+                    c ) );
+
+            boolean previousIsWhitespace   = Character.isWhitespace( previousChar );
+            boolean lastOneIsNotUnderscore = ( buf.length() > 0 ) && ( buf.charAt( buf.length() - 1 ) != '_' );
+            boolean isNotUnderscore        = c != '_';
+            if ( ( lastOneIsNotUnderscore ) && ( ( isUpperCaseAndPreviousIsLowerCase ) || ( previousIsWhitespace ) || ( ( _betweenUpperCases ) && ( containsLowerCase ) && ( isUpperCaseAndPreviousIsUpperCase ) ) ) ) {
+                buf.append( "_" );
+            } else if ( ( ( separatorAfterDigit ) && ( Character.isDigit( previousChar ) ) && ( Character.isLetter( c ) ) ) || ( ( separatorBeforeDigit ) && ( Character
+                    .isDigit( c ) ) && ( Character.isLetter( previousChar ) ) ) ) {
+                buf.append( '_' );
+            }
+            if ( ( shouldReplace( c ) ) && ( lastOneIsNotUnderscore ) ) {
+                buf.append( '_' );
+            } else if ( ( ! Character.isWhitespace( c ) ) && ( ( isNotUnderscore ) || ( lastOneIsNotUnderscore ) ) ) {
+                buf.append( Character.toUpperCase( c ) );
+            }
+            previousChar = c;
+        }
+        if ( Character.isWhitespace( previousChar ) ) {
+            buf.append( "_" );
+        }
+        return buf.toString();
+    }
+
+    public static boolean containsLowerCase ( String s ) {
+        for ( char c : s.toCharArray() ) {
+            if ( Character.isLowerCase( c ) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean shouldReplace ( char c ) {
+        return ( c == '.' ) || ( c == '_' ) || ( c == '-' );
+    }
+
+    private static String wordsToHyphenCase ( String s ) {
+        StringBuilder buf      = new StringBuilder();
+        char          lastChar = 'a';
+        for ( char c : s.toCharArray() ) {
+            if ( ( Character.isWhitespace( lastChar ) ) && ( ! Character.isWhitespace( c ) ) && ( '-' != c ) && ( buf.length() > 0 ) && ( buf
+                    .charAt( buf.length() - 1 ) != '-' ) ) {
+                buf.append( "-" );
+            }
+            if ( '_' == c ) {
+                buf.append( '-' );
+            } else if ( '.' == c ) {
+                buf.append( '-' );
+            } else if ( ! Character.isWhitespace( c ) ) {
+                buf.append( Character.toLowerCase( c ) );
+            }
+            lastChar = c;
+        }
+        if ( Character.isWhitespace( lastChar ) ) {
+            buf.append( "-" );
+        }
+        return buf.toString();
+    }
 }

+ 13 - 4
src/main/resources/templates/controller.java.vm

@@ -1,7 +1,13 @@
 package ${package.Controller};
 
-import org.springframework.stereotype.Controller;
+
 import org.springframework.web.bind.annotation.RequestMapping;
+
+#if(${restControllerStyle})
+import org.springframework.web.bind.annotation.RestController;
+#else
+import org.springframework.stereotype.Controller;
+#end
 #if(${superControllerClassPackage})
 import ${superControllerClassPackage};
 #end
@@ -14,12 +20,15 @@ import ${superControllerClassPackage};
  * @author ${author}
  * @since ${date}
  */
+#if(${restControllerStyle})
+@RestController
+#else
 @Controller
-@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/${table.entityPath}")
+#end
+@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
 #if(${superControllerClass})
 public class ${table.controllerName} extends ${superControllerClass} {
 #else
 public class ${table.controllerName} {
 #end
-	
-}
+