Jdbi: 바인딩 λͺ©λ‘<integer>λ˜λŠ” λͺ©λ‘<long>@Bind 주석을 μ‚¬μš©ν•˜λ©΄ μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€.</long></integer>

에 λ§Œλ“  2017λ…„ 12μ›” 27일  Β·  16μ½”λ©˜νŠΈ  Β·  좜처: jdbi/jdbi

μ•ˆλ…•ν•˜μ„Έμš”,

λ¨Όμ € 이 ν›Œλ₯­ν•œ λ„μ„œκ΄€μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.
λ‚΄κ°€ κ²ͺκ³  μžˆλŠ” 였λ₯˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

빈 λͺ©λ‘ λ°”μΈλ”©λ˜λŠ” λͺ©λ‘@Bind 주석을 μ‚¬μš©ν•˜λ©΄ λ‹€μŒμ΄ λ°œμƒν•©λ‹ˆλ‹€.

java.util.List μœ ν˜•μ˜ '[]'에 λŒ€ν•΄ λ“±λ‘λœ 인수 νŒ©ν† λ¦¬κ°€ μ—†μŠ΅λ‹ˆλ‹€.

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•Œκ² μŠ΅λ‹ˆλ‹€. 이제 이해가 λ©λ‹ˆλ‹€.

JDBCλŠ” λ°°μ—΄λ‘œ μž‘μ—…ν•  λ•Œ μ•½κ°„ μ΄μƒν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ κ³΅κΈ‰μ—…μ²΄μ—μ„œ μ‚¬μš©ν•˜λŠ” 데이터 μœ ν˜• 이름을 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. Jdbiκ°€ 점을 μ—°κ²°ν•  수 μžˆλ„λ‘ ν•˜λ €λ©΄ Java 클래슀 μ΄λ¦„λ³„λ‘œ λ°°μ—΄ μš”μ†Œ μœ ν˜• 이름을 등둝해야 ν•©λ‹ˆλ‹€.

Jdbi jdbi = Jdbi.create(...);
...
jdbi.registerArrayType(int.class, "integer");
jdbi.registerArrayType(Integer.class, "integer");

λͺ¨λ“  16 λŒ“κΈ€

더 λ§Žμ€ μ»¨ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ–΄λ–€ SQL을 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? μ–΄λŠ λ°μ΄ν„°λ² μ΄μŠ€ κ³΅κΈ‰μ—…μ²΄μž…λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš” @qualidafial μž…λ‹ˆλ‹€ .

SQL: select * from invoice where invoice.id IN :ids
λ°μ΄ν„°λ² μ΄μŠ€ 곡급업체: SQL Server 2017

μ•Œκ² μŠ΅λ‹ˆλ‹€. 이제 이해가 λ©λ‹ˆλ‹€.

JDBCλŠ” λ°°μ—΄λ‘œ μž‘μ—…ν•  λ•Œ μ•½κ°„ μ΄μƒν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ κ³΅κΈ‰μ—…μ²΄μ—μ„œ μ‚¬μš©ν•˜λŠ” 데이터 μœ ν˜• 이름을 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. Jdbiκ°€ 점을 μ—°κ²°ν•  수 μžˆλ„λ‘ ν•˜λ €λ©΄ Java 클래슀 μ΄λ¦„λ³„λ‘œ λ°°μ—΄ μš”μ†Œ μœ ν˜• 이름을 등둝해야 ν•©λ‹ˆλ‹€.

Jdbi jdbi = Jdbi.create(...);
...
jdbi.registerArrayType(int.class, "integer");
jdbi.registerArrayType(Integer.class, "integer");

즉, μ‚¬μš©μžκ°€ μ˜¬λ°”λ₯Έ λ°©ν–₯을 가리킀도둝 μ˜ˆμ™Έ λ©”μ‹œμ§€λ₯Ό κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@qualidafial ν˜•λ‹˜ , μ΅œκ³ μž…λ‹ˆλ‹€. 정말 κ°μ‚¬ν•©λ‹ˆλ‹€!

:+1: μ°Έκ³ ν•˜μ„Έμš”. λ“œλΌμ΄λ²„κ°€ μ§€μ›ν•˜λŠ” μ‚¬μš©μž 지정 데이터 μœ ν˜•κ³Ό Java μœ ν˜•κ³Ό JDBC 데이터 μœ ν˜• κ°„μ˜ 맀핑이 무엇인지 μ•Œ 수 μžˆλ„λ‘ 일뢀 λ¬Έμ„œλ₯Ό μ•Œλ €μ£Όμ‹œλ©΄ SQL Server ν”ŒλŸ¬κ·ΈμΈμ„ Jdbi에 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이름.

거래.

κΈ°λ³Έ 데이터 μœ ν˜•:
https://docs.microsoft.com/en-us/sql/connect/jdbc/using-basic-data-types

κ³ κΈ‰ 데이터 μœ ν˜•:
https://docs.microsoft.com/en-us/sql/connect/jdbc/using-advanced-data-types

@qualidafial FYI, λΆ„λͺ…νžˆ μ€€λΉ„λœ SqlArrayκ°€ μžˆλŠ” IN 문은 SQL Server JDBC λ“œλΌμ΄λ²„μ—μ„œ μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ˜λŠ” @BindList μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@SqlQuery("select * from invoice where invoice.id IN (<ids>)")
Set<Invoice> getInvoices(@BindList("ids") List<Integer> ids);

λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€ κ³΅κΈ‰μ—…μ²΄λŠ” μ‰Όν‘œλ‘œ κ΅¬λΆ„λœ WHERE column IN (a, b, c, ...) μ ˆμ— ν—ˆμš©λ˜λŠ” ν•­λͺ© μˆ˜μ— μ œν•œμ„ λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€.

λΆ„λͺ…νžˆ SQL μ„œλ²„λŠ” 단일 κ°’ 맀개 λ³€μˆ˜λ§Œ μ§€μ›ν•˜λ―€λ‘œ μˆ˜λ™μœΌλ‘œ 배열을 λ§Œλ“€μ—ˆμ§€λ§Œ 이것은 λ¬Έμžμ—΄ 배열에 μ•ˆμ „ν•˜μ§€ μ•ŠμœΌλ©° SQL μ£Όμž…μ„ λ„μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

default List<LotInvoiceRef> getInvoices(List<Long> invoiceIds) {

        final List<LotInvoiceRef> lotInvoiceRefs = invoiceIds.stream()
                .map(String::valueOf)
                .reduce((a, b) -> a + "," + b)
                .map(this::getAllInvoiceRefs)
                .orElse(new ArrayList<>());

        return lotInvoiceRefs;

    }

@georgerb SQL μ£Όμž…μœΌλ‘œλΆ€ν„° λ³΄ν˜Έν•΄μ•Ό ν•˜λŠ” λ‚΄ λ§ˆμ§€λ§‰ μ˜κ²¬μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

λ‚˜λŠ” @BindList의 aproach을 μ‚¬λž‘ν•˜μ§€λ§Œ λ‚œ λͺ…μ‹œλ₯Ό κΈˆμ§€λ₯Ό @BindList 맀개 λ³€μˆ˜ 빈 λͺ©λ‘μ„ ν—ˆμš©ν•˜λŠ” 방법이 ν•„μš” @qualidafial.

@qualidafial nvm, 주석을 λΉ λ₯΄κ²Œ νŒŒν—€μΉ˜κ³  λ‹€μŒμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. @BindList(value = "invoiceIds", onEmpty = BindList.EmptyHandling.NULL) 그리고 μ™„λ²½ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μ‹œ λ§ν•˜μ§€λ§Œ 이것은 졜고 μˆ˜μ€€μž…λ‹ˆλ‹€. μš°λ¦¬κ°€ κΈ°μ—¬ν•  수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? μ΅œμ†Œν•œ λ¬Έμ„œλ‘œ μ—¬λŸ¬λΆ„μ„ λ•μŠ΅λ‹ˆλ‹€.

κ³ λ§ˆμ›Œμš”, 당신은 맀우 μΉœμ ˆν•©λ‹ˆλ‹€. 우리 :heart: ν’€ λ¦¬ν€˜μŠ€νŠΈ!

이 λŒ€ν™”λ§ŒμœΌλ‘œλ„ μ„Έ 가지 κ°€λŠ₯ν•œ κ°œμ„  사항을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • @BindList λŒ€ν•œ 개발자 κ°€μ΄λ“œ μ„Ήμ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€(μ•„λ§ˆλ„ @DefineList ).
  • SQL Array에 λŒ€ν•œ 개발자 κ°€μ΄λ“œ μ„Ήμ…˜μ„ μž‘μ„±ν•˜μ‹­μ‹œμ˜€.
  • SQL λ°°μ—΄ μœ ν˜•μ„ 등둝해야 ν•˜λŠ” 경우 μœ μ΅ν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μœ„μ˜ 각 ν•­λͺ©μ„ λŒ€μƒμœΌλ‘œ ν•˜λŠ” λ³„λ„μ˜ 문제λ₯Ό μ œμΆœν•΄ μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 이것을 λ‹«κ³  각각을 κ°œλ³„μ μœΌλ‘œ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.

그리고 ν•¨κ»˜ μ‹€ν–‰ν•˜κ³  싢은 Jdbi κ°œμ„ μ— λŒ€ν•œ 아이디어가 μžˆλ‹€λ©΄ ν•΄μ£Όμ„Έμš”! JPA, Kotlin 및 Vavr ν”ŒλŸ¬κ·ΈμΈκ³Ό Core 및 SQL Object의 λ§Žμ€ μš”μ†ŒλŠ” λͺ¨λ‘ Jdbi μ‚¬μš©μžκ°€ μ œμΆœν•œ κ²ƒμž…λ‹ˆλ‹€.

@qualidafial μ™„λ£Œ. #993

감사 ν•΄μš”! #993에 μ°¬μ„±ν•˜μ—¬ 이 문제λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰