自动生成spring控制器的menu菜单sql

内容为springboot3 生成方式

获取spring 和knife 注解,解析内容,并生成对应sql脚本。

@Tag 注解

@RequestMapping 注解

@Operation 注解

例如:Controller内容

 根据以上内容,需要生成菜单sql脚本如下:

 执行器代码:

import cn.hutool.core.util.IdUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *
 * </p>
 *
 * @author Garcia
 * @since 2023-06-05
 */
@Component
public class CreateMenusSqlHandle {

    @Autowired
    private RequestMappingHandlerMapping requestMappingHandlerMapping;

    @PostConstruct
    public void createMenusSql(){
        Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();
        Map<String,List<String>> pathInfo = new HashMap<>();
        for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : handlerMethods.entrySet()) {
            HandlerMethod method = entry.getValue();
            String controllerUri = "";
            String controllerkey = "";
            RequestMapping requestMapping = method.getBeanType().getAnnotation(RequestMapping.class);
            Tag tag = method.getBeanType().getAnnotation(Tag.class);
            if (requestMapping!=null&&tag!=null){
                controllerkey = requestMapping.value()[0]+"@_"+tag.name();
                controllerUri = requestMapping.value()[0];
                if (CollectionUtils.isEmpty(pathInfo.get(controllerkey))){
                    pathInfo.put(controllerkey,new ArrayList<>());
                }
            }
            RequestMapping methodRequest = method.getMethodAnnotation(RequestMapping.class);
            Operation methodOperation = method.getMethodAnnotation(Operation.class);
            if (methodRequest!=null&&methodOperation!=null&& StringUtils.isNotBlank(methodOperation.summary())){
                String mr;
                if (!methodRequest.value()[0].startsWith("/")){
                    mr = controllerUri+"/"+methodRequest.value()[0];
                }else {
                    mr = controllerUri+methodRequest.value()[0];
                }
                pathInfo.get(controllerkey).add(mr+"@_"+methodOperation.summary());
            }
        }
        String sqlPrefix = "INSERT INTO `fuing_awaken`.`fuin_admin_menus` (`id`, `parent_id`, `name`, `url`, `sort`, `status`, `type`, `is_delete`, `create_time`, `update_time`) VALUES (%s, %s, '%s', '%s', %s, 1, %s, 0, SYSDATE(), SYSDATE());";
        int index = 0;
        for (Map.Entry<String, List<String>> entry :pathInfo.entrySet()) {
            String parentUrl = entry.getKey().split("@_")[0];
            String parentName = entry.getKey().split("@_")[1];
            System.out.println(String.format(sqlPrefix, IdUtil.getSnowflakeNextId(),"NULL",parentName,parentUrl,index++,1));
            List<String> vals = entry.getValue();
            int childIndex= 0;
            for (String val:vals){
                String url = val.split("@_")[0];
                String name = val.split("@_")[1];
                String queryParentId = "(select fam.id from (select id from fuin_admin_menus where url='"+parentUrl+"') fam)";
                System.out.println(String.format(sqlPrefix,IdUtil.getSnowflakeNextId(),queryParentId,name,url,childIndex++,2));
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Qensq/article/details/131049684