Jdbi: рд╕рдВрд╕реНрдХрд░рдг 3.5.1 . рдХреЗ рдмрд╛рдж рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдЧрд┐рд░рд╛рд╡рдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЕрдХреНрддреВре░ 2019  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jdbi/jdbi

рдореИрдВрдиреЗ 20+ рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реЗ рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдмреАрдиреНрд╕ рдкрдВрдХреНрддрд┐ рдФрд░ рддрд░реНрдХ рдореИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдВрд╕реНрдХрд░рдг 3.5.1 рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг 3.10.1 (рдбреНрд░реЙрдкрд╡рд┐рдЬрд╝рд╛рд░реНрдб 1.3.5 -> 2.0.X) рдкрд░ рдЬрд╛рдиреЗ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдЧрд┐рд░рд╛рд╡рдЯ рджреЗрдЦреА рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдорд╛рдЗрдХреНрд░реЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/Alexey1Gavrilov/jdbi-test рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред 3.5.1 рдФрд░ 3.10.1 рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп 70% рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдкрд░реАрдХреНрд╖рдг 3.11.1 - 3.5.1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 20% рд╕реБрдзрд╛рд░! рдорд╣рд╛рди рдХрд╛рдо!
рдореИрдВ рд╕реНрдиреЗрдХрдХреЗрд╕ рдореИрдЪрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗ @ Alexey1Gavrilov , рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдкреНрд░рддрд┐рдЧрдорди рд╣реБрдП рд╣реИрдВред

рдореИрдВрдиреЗ рд╕реНрдерд┐рддрд┐ рд╕реБрдзрд╛рд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛: https://github.com/jdbi/jdbi/pull/1607
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рддреЛрдбрд╝рддреЗ :)

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рд╣реИ рдХрд┐ рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реБрдзрд╛рд░ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ?
рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реБрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ #1607 рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдЗрдХреНрд░реЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЙрд╕ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 10-15% рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рдлрд┐рд░ 3.5.1 рдкрд░ред рдорд╣рд╛рди рдХрд╛рдо!

рд╣рдордиреЗ рдХреЙрд▓рдо рдиреЗрдо рдореИрдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХреИрд╢ рд▓реЗрдпрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдореВрд▓ рд░реВрдк рд╕реЗ columnName рдФрд░ javaName Jdbi рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ:

class CachingColumnNameMatcher implements ColumnNameMatcher {
  private static class Column {
    final String columnName;
    final String javaName;

    private Column(String columnName, String javaName) {
      this.columnName = columnName;
      this.javaName = javaName;
    }

    <strong i="10">@Override</strong>
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      Column column = (Column) o;
      return Objects.equals(columnName, column.columnName) &&
          Objects.equals(javaName, column.javaName);
    }

    <strong i="11">@Override</strong>
    public int hashCode() {
      return Objects.hash(columnName, javaName);
    }
  }

  private final ColumnNameMatcher delegate;
  private final ConcurrentMap<Column, Boolean> cache;

  CachingColumnNameMatcher(final ColumnNameMatcher delegate) {
    this.delegate = delegate;
    this.cache = new ConcurrentHashMap<>();
  }

  <strong i="12">@Override</strong>
  public boolean columnNameMatches(final String columnName, final String javaName) {
    final Column key = new Column(columnName, javaName);

    return cache.computeIfAbsent(key, (c) -> delegate.columnNameMatches(columnName, javaName));
  }
}

...
    final ReflectionMappers reflectionMappers = jdbi.getConfig().get(ReflectionMappers.class);
    reflectionMappers.setColumnNameMatchers(
        reflectionMappers.getColumnNameMatchers().stream()
            .map(CachingColumnNameMatcher::new)
            .collect(Collectors.toList()));
...

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреИрд╢рд┐рдВрдЧ рдХреЙрд▓рдо рдирд╛рдо рдХреА рддреБрд▓рдирд╛ рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ (рдпрд╣ рдХреБрдЫ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ), рдЕрдЧрд░ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВред

@ Alexey1Gavrilov , рдореИрдВрдиреЗ рдЕрднреА 3.11.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ #1607 рд╢рд╛рдорд┐рд▓ рд╣реИред

рдореБрдЭреЗ рдХреЙрд▓рдо рдирд╛рдо рдорд┐рд▓рд╛рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдорд┐рд▓рд╛рдиреЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдПрдХ рднрд╛рд░реА-рднрд░рдХрдо рд╕рдорд╛рдзрд╛рди рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ - рд╕реНрдиреЗрдХрдХреЗрд╕ рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ? рдЖрдЗрдП рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмреЗрд╣рддрд░ рд╡рд┐рд╡рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдХреИрд╢рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ :)

рдкрд░реАрдХреНрд╖рдг 3.11.1 - 3.5.1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 20% рд╕реБрдзрд╛рд░! рдорд╣рд╛рди рдХрд╛рдо!
рдореИрдВ рд╕реНрдиреЗрдХрдХреЗрд╕ рдореИрдЪрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕