/** * Check condition node property exist. * * @author wangyi8 * @taskId * @param node the node * @param clz the clz * @param errMsg the err msg */ private void checkConditionNodePropertyExist(ConditionNode node, Class clz, String errMsg) { if (StringUtil.containBrace(node.getValue())) { if (clz == null || ArrayUtil.contains(Config.IGNORE_PARAMETER_TYPES, clz)) { return; } else { List<String> propertyNames = StringUtil.extractBrace(node.getValue()); for (String propertyName : propertyNames) { if (node.getConditionType().equals("in") && (propertyName.equals("item") || propertyName.startsWith("item."))) { // foreach 条件在foreach标签中判断,这里不判断 return; } try { ReflectHelper.haveGetMethod(propertyName, clz); } catch (MapperException e) { e.setDescription( errMsg + String.format(MessageConstant.EXPRESS_MSG, node.toString()) + SymbolConstant.SYMBOL_BLANK + e.getDescription()); e.printException(); } } } } }
/** * Validate update property exist. * * @author wangyi8 * @taskId * @param item the item */ private void validateUpdatePropertyExist(UpdateMappedStatementItem item) { Class clz = item.getParameterType(); if (ClassUtil.ignorePropertyCheck(clz)) { // String clzName = clz == null ? SymbolConstant.SYMBOL_NULL : clz.getName(); /*new MapperException(ExceptionCommonConstant.IGNORE_PARAMETER_TYPES, item.getInfoMessage() + SymbolConstant.SYMBOL_COLON + String.format(MessageConstant.EXPRESS_MSG, clzName)).printException();*/ return; } List<UpdateIfSetNode> setNodeList = item.getSetNodeList(); if (setNodeList != null) { for (int i = 0; i < setNodeList.size(); i++) { UpdateIfSetNode node = setNodeList.get(i); // 验证字段和属性是否存在 List<String> propertyNames = StringUtil.extractBrace(node.getIfContent()); for (int k = 0; k < propertyNames.size(); k++) { PropertyModel propertyModel = new PropertyModel(propertyNames.get(k)); // 验证属性是否存在 try { ReflectHelper.haveGetMethod(propertyModel.getPropertyName(), clz); } catch (MapperException e) { new MapperException( ExceptionCommonConstant.GET_METHOD_NOT_EXIST, item.getInfoMessage() + SymbolConstant.SYMBOL_COLON + String.format(MessageConstant.EXPRESS_MSG, node.getIfContent())) .printException(); } } } } List<SelectElement> selectElements = item.getWhereConditions(); for (int i = 0; i < selectElements.size(); i++) { if (selectElements.get(i) instanceof ConditionNode) { ConditionNode conditionNode = (ConditionNode) selectElements.get(i); List<String> propertyList = StringUtil.extractBrace(conditionNode.toString()); for (String propertyName : propertyList) { PropertyModel propertyModel = new PropertyModel(propertyName); if (ignoreProperty(conditionNode, propertyModel)) { continue; } try { ReflectHelper.haveGetMethod(propertyModel.getPropertyName(), clz); } catch (MapperException e) { new MapperException( ExceptionCommonConstant.GET_METHOD_NOT_EXIST, item.getInfoMessage() + SymbolConstant.SYMBOL_COLON + String.format(MessageConstant.EXPRESS_MSG, conditionNode.toString())) .printException(); } } } } }
/** * 自验证方法 * * @param parameterType 参数类型 * @throws MapperException 异常 */ public boolean validate(Class parameterType) throws MapperException { super.validate(parameterType); MapperException mapperException = null; if (getIfContent() == null) { throw new MapperException( ExceptionCommonConstant.IF_TAG_EXPLAIN_ERROR, String.format(ERROR_MSG, getContents())); } if (!getIfContent().trim().endsWith(SymbolConstant.SYMBOL_COMMA)) { mapperException = new MapperException( ExceptionCommonConstant.INSERT_END_WITH_COMMA, String.format(ERROR_MSG, getIfContent())); } if (!StringUtil.containBrace(getIfContent())) { // 不包含赋值标记,表示赋值为固定值,不做验证 return true; } List<String> propertyNames = StringUtil.extractBrace(getIfContent()); String propertyName = propertyNames.get(0); if (propertyName.contains(SqlHelperConstant.JDBC_TYPE_TAG)) { propertyName = propertyName.substring(0, propertyName.indexOf(SqlHelperConstant.JDBC_TYPE_TAG)); } boolean result = ReflectHelper.haveGetMethod(propertyName, parameterType); if (!result) { if (mapperException != null) { mapperException.appendMessage(ExceptionCommonConstant.COLUMN_NOT_EXIST); } else { mapperException = new MapperException( ExceptionCommonConstant.COLUMN_NOT_EXIST, String.format(ERROR_MSG, getIfContent())); } } if (mapperException != null) { throw mapperException; } else { return true; } }