private void loadMappingStrategies(Map<String, Object> global) {
        // Path1. aggregate configurations by name
        Map<String, Object> strategyConfigMap = CollectionUtil.filterByKey(global, new Predicate<String>() {
            @Override
            public boolean evaluate(String s) {
                return s.startsWith(RowMapper.CONFIG_PREFIX);
            }
        });
        Map<String, MappingStrategy> strategyMap = new HashMap<String, MappingStrategy>();
        for ( String key : strategyConfigMap.keySet() ) {
            String truncatedName = key.substring(RowMapper.CONFIG_PREFIX.length());
            String strategyName = truncatedName.substring(0, truncatedName.indexOf("."));
            if ( ! strategyMap.containsKey( strategyName) ) {
                MappingStrategy mappingStrategy = new MappingStrategy(strategyName);
                strategyMap.put(strategyName, mappingStrategy);
            }
            String configKey = truncatedName.substring(strategyName.length() + 1); // without '.'!
            String configValue = (String) strategyConfigMap.get(key);
            strategyMap.get(strategyName).configMap.put(configKey, configValue);
        }

        // Path2. create RowMapper
        this.mappingStrategyMap = new HashMap<String, RowMapper>();
        for ( String key : strategyMap.keySet() ) {
            MappingStrategy mappingStrategy = strategyMap.get(key);
            String rowMapperFqcn = (String) mappingStrategy.configMap.get("fqcn");
            boolean rowMapperFqcnRequired = rowMapperFqcn == null;
            if ( rowMapperFqcnRequired ) {
                throw new DataAccessException(
                        "行マッピング設定の必須項目「fqcn」が指定されていません: キー=" + RowMapper.CONFIG_PREFIX + key + ".fqcn");
            }

            RowMapper rowMapper = ClassUtil.createInstance(rowMapperFqcn);
            rowMapper.initialize(mappingStrategy.configMap);
            mappingStrategyMap.put(key, rowMapper);
        }
    }