内容为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));
}
}
}
}