内容为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 {@Autowiredprivate RequestMappingHandlerMapping requestMappingHandlerMapping;@PostConstructpublic 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));}}}
}