use of com.github.dreamroute.mybatis.pro.core.exception.MyBatisProException 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() + "文件中的方法重名");
}
}
use of com.github.dreamroute.mybatis.pro.core.exception.MyBatisProException in project mybatis-pro by Dreamroute.
the class XmlUtil method getNamespaceFromXmlResource.
/**
* 从mapper.xml文件中获取namespace
*
* @param resource mapper.xml数据流
*/
public static Class<?> getNamespaceFromXmlResource(Resource resource) {
try {
XPathParser xPathParser = new XPathParser(resource.getInputStream(), true, null, new XMLMapperEntityResolver());
XNode mapperNode = xPathParser.evalNode(MAPPER.getCode());
String namespace = mapperNode.getStringAttribute(NAMESPACE.getCode());
return loadClass(namespace);
} catch (Exception e) {
throw new MyBatisProException("解析mapper.xml文件获取namespace出错", e);
}
}
Aggregations