Search in sources :

Example 1 with Mapper

use of com.github.dreamroute.mybatis.pro.sdk.Mapper in project mybatis-pro by Dreamroute.

the class MyBatisProUtil method validateDuplicateMethods.

/**
 * 校验Mapper接口内的xxxBy方法不能与xml文件的方法有同名
 */
private static void validateDuplicateMethods(Class<?> mapperCls, Resource resource) {
    XPathParser xPathParser;
    try {
        xPathParser = new XPathParser(resource.getInputStream(), true, null, new XMLMapperEntityResolver());
    } catch (Exception e) {
        throw new MyBatisProException("解析" + mapperCls.getName() + "对应的mapper.xml文件失败!");
    }
    List<XNode> selectMethods = xPathParser.evalNodes("mapper/select");
    List<XNode> insertMethods = xPathParser.evalNodes("mapper/insert");
    List<XNode> updateMethods = xPathParser.evalNodes("mapper/update");
    List<XNode> deleteMethods = xPathParser.evalNodes("mapper/delete");
    List<XNode> methods = new ArrayList<>();
    methods.addAll(selectMethods);
    methods.addAll(insertMethods);
    methods.addAll(updateMethods);
    methods.addAll(deleteMethods);
    Set<String> xmlMethodNames = methods.stream().map(node -> node.getStringAttribute(ID.getCode())).collect(toSet());
    // BaseMapper的方法 + xxxBy方法
    Set<String> innerMethodNames = getBaseMethodNames();
    List<String> specialMethods = getSpecialMethods(mapperCls);
    innerMethodNames.addAll(specialMethods);
    SetView<String> intersection = Sets.intersection(xmlMethodNames, innerMethodNames);
    if (!isEmpty(intersection)) {
        throw new MyBatisProException("不允许接口" + mapperCls.getName() + "的方法" + toJsonStr(innerMethodNames) + "与" + resource.getFilename() + "文件中的方法重名");
    }
}
Also used : CollectionUtils.isEmpty(org.springframework.util.CollectionUtils.isEmpty) ClassUtil.getTypeArgument(cn.hutool.core.util.ClassUtil.getTypeArgument) ID(com.github.dreamroute.mybatis.pro.core.consts.MapperLabel.ID) Arrays(java.util.Arrays) DocumentUtil.fillSqlNode(com.github.dreamroute.mybatis.pro.core.util.DocumentUtil.fillSqlNode) MyBatisProException(com.github.dreamroute.mybatis.pro.core.exception.MyBatisProException) HashMap(java.util.HashMap) Table(com.github.dreamroute.mybatis.pro.core.annotations.Table) AnnotationUtil.hasAnnotation(cn.hutool.core.annotation.AnnotationUtil.hasAnnotation) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) DocumentUtil.createResourceFromDocument(com.github.dreamroute.mybatis.pro.core.util.DocumentUtil.createResourceFromDocument) JsonUtil.toJsonStr(com.github.dreamroute.mybatis.pro.base.codec.enums.JsonUtil.toJsonStr) Sets.difference(com.google.common.collect.Sets.difference) Mapper(com.github.dreamroute.mybatis.pro.sdk.Mapper) Collectors.toMap(java.util.stream.Collectors.toMap) DocumentUtil.createDocumentFromResource(com.github.dreamroute.mybatis.pro.core.util.DocumentUtil.createDocumentFromResource) Document(org.w3c.dom.Document) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) AnnotationUtil.getAnnotationValue(cn.hutool.core.annotation.AnnotationUtil.getAnnotationValue) DELETE(com.github.dreamroute.mybatis.pro.core.consts.MapperLabel.DELETE) Collectors.toSet(java.util.stream.Collectors.toSet) Resource(org.springframework.core.io.Resource) XmlUtil.getNamespaceFromXmlResource(com.github.dreamroute.mybatis.pro.core.util.XmlUtil.getNamespaceFromXmlResource) ClassUtil.getSpecialMethods(com.github.dreamroute.mybatis.pro.core.util.ClassUtil.getSpecialMethods) Optional.ofNullable(java.util.Optional.ofNullable) SetView(com.google.common.collect.Sets.SetView) Set(java.util.Set) Field(java.lang.reflect.Field) ClassUtil.loadClass(cn.hutool.core.util.ClassUtil.loadClass) MapperLabel(com.github.dreamroute.mybatis.pro.core.consts.MapperLabel) Sets(com.google.common.collect.Sets) ClassUtil.getMethodName2ReturnType(com.github.dreamroute.mybatis.pro.core.util.ClassUtil.getMethodName2ReturnType) SqlUtil.toLine(com.github.dreamroute.mybatis.pro.core.util.SqlUtil.toLine) List(java.util.List) ClassUtil.scanPackageBySuper(cn.hutool.core.util.ClassUtil.scanPackageBySuper) XPathParser(org.apache.ibatis.parsing.XPathParser) Column(com.github.dreamroute.mybatis.pro.core.annotations.Column) ClassUtil.getBaseMethodNames(com.github.dreamroute.mybatis.pro.core.util.ClassUtil.getBaseMethodNames) SELECT(com.github.dreamroute.mybatis.pro.core.consts.MapperLabel.SELECT) XNode(org.apache.ibatis.parsing.XNode) ClassPathUtil(com.github.dreamroute.mybatis.pro.base.util.ClassPathUtil) XMLMapperEntityResolver(org.apache.ibatis.builder.xml.XMLMapperEntityResolver) Arrays.stream(java.util.Arrays.stream) StringUtils(org.springframework.util.StringUtils) XMLMapperEntityResolver(org.apache.ibatis.builder.xml.XMLMapperEntityResolver) XPathParser(org.apache.ibatis.parsing.XPathParser) XNode(org.apache.ibatis.parsing.XNode) ArrayList(java.util.ArrayList) MyBatisProException(com.github.dreamroute.mybatis.pro.core.exception.MyBatisProException) MyBatisProException(com.github.dreamroute.mybatis.pro.core.exception.MyBatisProException)

Aggregations

AnnotationUtil.getAnnotationValue (cn.hutool.core.annotation.AnnotationUtil.getAnnotationValue)1 AnnotationUtil.hasAnnotation (cn.hutool.core.annotation.AnnotationUtil.hasAnnotation)1 ClassUtil.getTypeArgument (cn.hutool.core.util.ClassUtil.getTypeArgument)1 ClassUtil.loadClass (cn.hutool.core.util.ClassUtil.loadClass)1 ClassUtil.scanPackageBySuper (cn.hutool.core.util.ClassUtil.scanPackageBySuper)1 JsonUtil.toJsonStr (com.github.dreamroute.mybatis.pro.base.codec.enums.JsonUtil.toJsonStr)1 ClassPathUtil (com.github.dreamroute.mybatis.pro.base.util.ClassPathUtil)1 Column (com.github.dreamroute.mybatis.pro.core.annotations.Column)1 Table (com.github.dreamroute.mybatis.pro.core.annotations.Table)1 MapperLabel (com.github.dreamroute.mybatis.pro.core.consts.MapperLabel)1 DELETE (com.github.dreamroute.mybatis.pro.core.consts.MapperLabel.DELETE)1 ID (com.github.dreamroute.mybatis.pro.core.consts.MapperLabel.ID)1 SELECT (com.github.dreamroute.mybatis.pro.core.consts.MapperLabel.SELECT)1 MyBatisProException (com.github.dreamroute.mybatis.pro.core.exception.MyBatisProException)1 ClassUtil.getBaseMethodNames (com.github.dreamroute.mybatis.pro.core.util.ClassUtil.getBaseMethodNames)1 ClassUtil.getMethodName2ReturnType (com.github.dreamroute.mybatis.pro.core.util.ClassUtil.getMethodName2ReturnType)1 ClassUtil.getSpecialMethods (com.github.dreamroute.mybatis.pro.core.util.ClassUtil.getSpecialMethods)1 DocumentUtil.createDocumentFromResource (com.github.dreamroute.mybatis.pro.core.util.DocumentUtil.createDocumentFromResource)1 DocumentUtil.createResourceFromDocument (com.github.dreamroute.mybatis.pro.core.util.DocumentUtil.createResourceFromDocument)1 DocumentUtil.fillSqlNode (com.github.dreamroute.mybatis.pro.core.util.DocumentUtil.fillSqlNode)1