/** * 获取当前执行 MappedStatement * * @param metaObject 元对象 */ public static MappedStatement getMappedStatement(MetaObject metaObject) { return (MappedStatement) metaObject.getValue(DELEGATE_MAPPED_STATEMENT); } }
public Object convertArgsToSqlCommandParam(Object[] args) { return paramNameResolver.getNamedParams(args); }
/** * get value from java bean by propertyName * <p>如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);</p> * * @param fieldName java bean property name * @param metaObject parameter wrapper * @return 字段值 */ default Object getFieldValByName(String fieldName, MetaObject metaObject) { if (metaObject.hasGetter(fieldName)) { return metaObject.getValue(fieldName); } else if (metaObject.hasGetter(Constants.ENTITY_DOT + fieldName)) { return metaObject.getValue(Constants.ENTITY_DOT + fieldName); } return null; }
/** * 通用填充 * * @param fieldName java bean property name * @param fieldVal java bean property value * @param metaObject meta object parameter */ default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) { if (Objects.nonNull(fieldVal)) { if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) { metaObject.setValue(fieldName, fieldVal); } else if (metaObject.hasGetter(Constants.ENTITY)) { Object et = metaObject.getValue(Constants.ENTITY); if (et != null) { MetaObject etMeta = SystemMetaObject.forObject(et); if (etMeta.hasSetter(fieldName)) { etMeta.setValue(fieldName, fieldVal); } } } } return this; }
private void setValue(MetaObject metaParam, String property, Object value) { if (metaParam.hasSetter(property)) { if(metaParam.hasGetter(property)){ Object defaultValue = metaParam.getValue(property); if(defaultValue != null){ return; } } metaParam.setValue(property, value); } else { throw new ExecutorException("No setter found for the keyProperty '" + property + "' in " + metaParam.getOriginalObject().getClass().getName() + "."); } } }
/** * 重新设置SqlSource * * @param ms * @param sqlSource */ protected void setSqlSource(MappedStatement ms, SqlSource sqlSource) { MetaObject msObject = MetaObjectUtil.forObject(ms); msObject.setValue("sqlSource", sqlSource); }
@Override public Object intercept(Invocation invocation) throws Throwable { Object[] args = invocation.getArgs(); MappedStatement ms = (MappedStatement) args[0]; Object parameter = args[1]; Configuration configuration = ms.getConfiguration(); Object target = invocation.getTarget(); StatementHandler handler = configuration.newStatementHandler((Executor) target, ms, parameter, RowBounds.DEFAULT, null, null); this.sqlParser(SystemMetaObject.forObject(handler)); return invocation.proceed(); }
@Test void testTableInfoHelper3() { MetaClass metaClass = MetaClass.forClass(CommonData.class, new DefaultReflectorFactory()); String property = metaClass.findProperty("TESTINT", true); System.out.println(property); }
private Properties settingsAsProperties(XNode context) { if (context == null) { return new Properties(); } Properties props = context.getChildrenAsProperties(); // Check that all settings are known to the configuration class MetaClass metaConfig = MetaClass.forClass(Configuration.class, localReflectorFactory); for (Object key : props.keySet()) { if (!metaConfig.hasSetter(String.valueOf(key))) { throw new BuilderException("The setting " + key + " is not known. Make sure you spelled it correctly (case sensitive)."); } } return props; }
public static MetaObject forObject(Object object) { try { return MetaObject.forObject(object, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY); } catch (Exception e) { throw new PageException(e); } }
public MethodSignature(Configuration configuration, Class<?> mapperInterface, Method method) { Type resolvedReturnType = TypeParameterResolver.resolveReturnType(method, mapperInterface); if (resolvedReturnType instanceof Class<?>) { this.returnType = (Class<?>) resolvedReturnType; } else if (resolvedReturnType instanceof ParameterizedType) { this.returnType = (Class<?>) ((ParameterizedType) resolvedReturnType).getRawType(); } else { this.returnType = method.getReturnType(); } this.returnsVoid = void.class.equals(this.returnType); this.returnsMany = configuration.getObjectFactory().isCollection(this.returnType) || this.returnType.isArray(); this.returnsCursor = Cursor.class.equals(this.returnType); this.returnsOptional = Optional.class.equals(this.returnType); this.mapKey = getMapKey(method); this.returnsMap = this.mapKey != null; this.rowBoundsIndex = getUniqueParamIndex(method, RowBounds.class); this.resultHandlerIndex = getUniqueParamIndex(method, ResultHandler.class); this.paramNameResolver = new ParamNameResolver(configuration, method); }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { try { if (Object.class.equals(method.getDeclaringClass())) { return method.invoke(this, args); } else if (isDefaultMethod(method)) { return invokeDefaultMethod(proxy, method, args); } } catch (Throwable t) { throw ExceptionUtil.unwrapThrowable(t); } final MybatisMapperMethod mapperMethod = cachedMapperMethod(method); return mapperMethod.execute(sqlSession, args); }
/** * Common method to set value for java bean. * <p>如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);</p> * * @param fieldName java bean property name * @param fieldVal java bean property value * @param metaObject meta object parameter * @param fieldFill 填充策略枚举 * @since 3.0.7 */ default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject, FieldFill fieldFill) { if (Objects.nonNull(fieldVal)) { if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName) && isFill(fieldName, fieldVal, metaObject, fieldFill)) { metaObject.setValue(fieldName, fieldVal); } else if (metaObject.hasGetter(Constants.ENTITY)) { Object et = metaObject.getValue(Constants.ENTITY); if (et != null) { MetaObject etMeta = SystemMetaObject.forObject(et); if (etMeta.hasSetter(fieldName) && isFill(fieldName, fieldVal, etMeta, fieldFill)) { etMeta.setValue(fieldName, fieldVal); } } } } return this; }
private void setValue(MetaObject metaParam, String property, Object value) { if (metaParam.hasSetter(property)) { if(metaParam.hasGetter(property)){ Object defaultValue = metaParam.getValue(property); if(defaultValue != null){ return; } } metaParam.setValue(property, value); } else { throw new ExecutorException("No setter found for the keyProperty '" + property + "' in " + metaParam.getOriginalObject().getClass().getName() + "."); } } }
private void handleMultipleProperties(String[] keyProperties, MetaObject metaParam, MetaObject metaResult) { String[] keyColumns = keyStatement.getKeyColumns(); if (keyColumns == null || keyColumns.length == 0) { // no key columns specified, just use the property names for (String keyProperty : keyProperties) { setValue(metaParam, keyProperty, metaResult.getValue(keyProperty)); } } else { if (keyColumns.length != keyProperties.length) { throw new ExecutorException("If SelectKey has key columns, the number must match the number of key properties."); } for (int i = 0; i < keyProperties.length; i++) { setValue(metaParam, keyProperties[i], metaResult.getValue(keyColumns[i])); } } }
/** * 重新设置SqlSource * * @param ms * @param sqlSource */ protected void setSqlSource(MappedStatement ms, SqlSource sqlSource) { MetaObject msObject = MetaObjectUtil.forObject(ms); msObject.setValue("sqlSource", sqlSource); }
private void handleMultipleProperties(String[] keyProperties, MetaObject metaParam, MetaObject metaResult) { String[] keyColumns = keyStatement.getKeyColumns(); if (keyColumns == null || keyColumns.length == 0) { // no key columns specified, just use the property names for (String keyProperty : keyProperties) { setValue(metaParam, keyProperty, metaResult.getValue(keyProperty)); } } else { if (keyColumns.length != keyProperties.length) { throw new ExecutorException("If SelectKey has key columns, the number must match the number of key properties."); } for (int i = 0; i < keyProperties.length; i++) { setValue(metaParam, keyProperties[i], metaResult.getValue(keyColumns[i])); } } }
protected void handleParameter(BoundSql boundSql, MappedStatement ms){ if (boundSql.getParameterMappings() != null) { List<ParameterMapping> newParameterMappings = new ArrayList<ParameterMapping>(boundSql.getParameterMappings()); newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_FIRST, Integer.class).build()); newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, Integer.class).build()); MetaObject metaObject = MetaObjectUtil.forObject(boundSql); metaObject.setValue("parameterMappings", newParameterMappings); } } }