20κ° μ΄μμ νλκ° μλ Java μ νμ λν΄ Java Beans ν λ° μΈμ 맀νΌλ₯Ό μ¬μ©νλ λμ λ²μ 3.5.1μμ λ²μ 3.10.1(Dropwizard 1.3.5 -> 2.0.X)λ‘ μ΄λν λ μλΉν μ±λ₯ μ νλ₯Ό λ°κ²¬νμ΅λλ€.
λ¬Έμ λ₯Ό μ¬ννκΈ° μν΄ λ§μ΄ν¬λ‘ λ²€μΉλ§ν¬ νλ‘κ·Έλ¨( https://github.com/Alexey1Gavrilov/jdbi-test) μ λ§λ€μμ΅λλ€. 3.5.1 λ° 3.10.1μ μ€ν μκ°μ μ΅λ 70%κΉμ§ λ€λ₯Ό μ μμ΅λλ€.
μλ νμΈμ @Alexey1Gavrilov , μ κ³ ν΄ μ£Όμ μ κ°μ¬ν©λλ€! νμ€ν μ½κ°μ νκ·κ° μμλ€λ λ° λμν©λλ€.
μν© κ°μ μμ
μ μμνμ΅λλ€. https://github.com/jdbi/jdbi/pull/1607
νμ¬, μ°λ¦¬κ° λͺ¨λ κ²μ κΉ¨λ¨λ¦¬μ§ μλλ‘ κ²ν μ λͺ κ°μ§ ν
μ€νΈλ₯Ό κΈ°λ€λ¦¬κ³ μμ΅λλ€. :)
μμ λ§ν¬λ μμ μ¬νμ΄ μ¬μ© μ¬λ‘μ λμμ΄ λλμ§ λ
립μ μΌλ‘ νμΈν μκ°μ΄ μμ΅λκΉ?
κ°μ¬ν©λλ€. 곧 μμ μ¬νμ΄ λ³ν©λκΈ°λ₯Ό λ°λλλ€.
μ΄λ―Έ κ°μ μμ μ νκ³ μλ€λ μμ£Ό μ’μ μμμ λλ€! #1607μ΄ μ±λ₯μ ν¬κ² ν₯μμν€λ κ²μ νμΈν μ μμ΅λλ€. λ΄ λ§μ΄ν¬λ‘ λ²€μΉλ§ν¬ νλ‘κ·Έλ¨μ ν΄λΉ PRλ‘ μ€νν λ€μ 3.5.1μμ μ½ 10-15% λ λΉ λ₯΄κ² μ€νλ©λλ€. νλ₯ν μΌ!
λν μ±λ₯μ λμ± ν₯μμν€λ μ΄ μ΄λ¦ μΌμΉμμ λν μ¬μ©μ μ§μ μΊμ κ³μΈ΅μ ꡬννμ΅λλ€. μμ΄λμ΄λ κΈ°λ³Έμ μΌλ‘ Jdbi
μΈμ€ν΄μ€κ° μ²λ¦¬νλ λͺ¨λ νλμ λν΄ columnName
λ° javaName
μ λΉκ΅λ₯Ό μΊμνλ κ²μ΄μμ΅λλ€. λ€μμ μ½λ μ€λν«μ
λλ€.
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()));
...
μΊμ± μ΄ μ΄λ¦ λΉκ΅κ° μλ―Έκ° μλμ§(μΌλΆ κ°λΉμ§ μμ§ λΉμ©μ΄ ν¬ν¨λ¨) PRμ μ΄ μ μλμ§ μλ €μ£Όμμμ€.
@Alexey1Gavrilov , λ°©κΈ #1607μ΄ ν¬ν¨λ 3.11.0μ μΆμνμ΅λλ€.
λͺ¨λ μΌμΉλ₯Ό μΊμ±νλ κ²μ΄ μλ§λ λ¬΄κ±°μ΄ μ루μ μΌ μ μμ§λ§ μ΄ μ΄λ¦ μΌμΉμ μ±λ₯μ κ°μ νκ² λμ΄ κΈ°μ©λλ€. νΉμ 맀μ²(SnakeCase 맀μ²)μ λ¬Έμ κ° μμ΅λκΉ? λΉμ μκ² μν₯μ λ―ΈμΉλ λ¬Έμ μ λν λ λμ μ€λͺ λΆν° μμνμ¬ μΊμ±μΌ μ μλ μ루μ μ κ³ μν΄ λ³΄κ² μ΅λλ€. :)
ν
μ€νΈ 3.11.1 - 3.5.1μ ββλΉν΄ 20% κ°μ ! νλ₯ν μΌ!
SnakeCase 맀μ²μ λν΄ λ³λμ λ¬Έμ λ₯Ό λ§λ€κ³ κ±°κΈ°μμ κ°λ₯ν μ루μ
μ λν΄ λ
Όμνκ² μ΅λλ€.
μ’μ κ³ λ§μ!
κ°μ₯ μ μ©ν λκΈ
ν μ€νΈ 3.11.1 - 3.5.1μ ββλΉν΄ 20% κ°μ ! νλ₯ν μΌ!
SnakeCase 맀μ²μ λν΄ λ³λμ λ¬Έμ λ₯Ό λ§λ€κ³ κ±°κΈ°μμ κ°λ₯ν μ루μ μ λν΄ λ Όμνκ² μ΅λλ€.