Jdbi: рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕реВрдЪреА<integer>рдпрд╛ рд╕реВрдЪреА<long>@Bind рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ</long></integer>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рджрд┐рд╕ре░ 2017  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jdbi/jdbi

рдирдорд╕реНрддреЗ,

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рдЖ рд░рд╣реА рд╣реИ рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреЛ рдмрд╛рдВрдзрдирд╛рдпрд╛ рд╕реВрдЪреА@Bind рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлреЗрдВрдХрддрд╛ рд╣реИ:

java.util.List . рдкреНрд░рдХрд╛рд░ рдХреЗ '[]' рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрд░реНрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИ

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

рдареАрдХ рд╣реИ, рдпрд╣ рдЕрдм рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬреЗрдбреАрдмреАрд╕реА рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ - рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред Jdbi рдХреЛ рдбреЙрдЯреНрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдРрд░реЗ рдПрд▓рд┐рдореЗрдВрдЯ рдЯрд╛рдЗрдк рдиреЗрдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

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

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

рдХреНрдпрд╛ рдЖрдк рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рдХрд┐рд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛?

рд╣рд╛рдп @рдХреНрд╡рд╛рд▓рд┐рдбрд╛рдлрд┐рдпрд▓ ,

рдПрд╕рдХреНрдпреВрдПрд▓: select * from invoice where invoice.id IN :ids
рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛: SQL рд╕рд░реНрд╡рд░ 2017

рдареАрдХ рд╣реИ, рдпрд╣ рдЕрдм рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬреЗрдбреАрдмреАрд╕реА рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ - рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред Jdbi рдХреЛ рдбреЙрдЯреНрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдРрд░реЗ рдПрд▓рд┐рдореЗрдВрдЯ рдЯрд╛рдЗрдк рдиреЗрдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

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

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЕрдкрд╡рд╛рдж рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@qualidafial рднрд╛рдИ, рдпрд╣ рд╢реАрд░реНрд╖ рдкрд╛рдпрджрд╛рди рд╣реИ, рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

: +1: рдмрд╕ рдПрдХ рд╕рд┐рд░ рдКрдкрд░, рд╣рдо Jdbi рдореЗрдВ рдПрдХ SQL рд╕рд░реНрд╡рд░ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд┐рд╕ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдкрд┐рдВрдЧ рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ JDBC рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╣реИ names.

рд╕реМрджрд╛ред

рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░:
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 рд╕рд░реНрд╡рд░ 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 рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

@qualidafial рдореИрдВ @BindList aproach рдкреНрдпрд╛рд░, рд▓реЗрдХрд┐рди рдореИрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИ @BindList рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реВрдЪрд┐рдпреЛрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░рд╣ рд╕реЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@qualidafial nvm, рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреБрджрд╛рдИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: @BindList(value = "invoiceIds", onEmpty = BindList.EmptyHandling.NULL) рдФрд░ рдЗрд╕рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛

рдлрд┐рд░, рдпрд╣ рд╢реАрд░реНрд╖ рдкрд╛рдпрджрд╛рди рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХрдо рд╕реЗ рдХрдо рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдорджрдж рдХрд░рдирд╛ред

рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдмрд╣реБрдд рджрдпрд╛рд▓реБ рд╣реИрдВред рд╣рдо: рджрд┐рд▓: рдЕрдиреБрд░реЛрдз рдЦреАрдВрдЪреЛ!

рдЕрдХреЗрд▓реЗ рдЗрд╕ рдмрд╛рддрдЪреАрдд рд╕реЗ рдореБрдЭреЗ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:

  • @BindList рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВ (рдФрд░ рд╢рд╛рдпрдж @DefineList рдЬрдм рддрдХ рд╣рдо рдЗрд╕ рдкрд░ рд╣реЛрдВ)ред
  • SQL Arrays рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб рд╕реЗрдХреНрд╢рди рдХреЛ рдлреНрд▓реЗрд╢ рдЖрдЙрдЯ рдХрд░реЗрдВред
  • SQL рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рд╕реВрдЪрдирд╛рддреНрдордХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрдпрд╛рд▓реБ рд╣реИрдВред рддрдм рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрджрдмреА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЪрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдХрд░реЗрдВ! рдЬреЗрдкреАрдП, рдХреЛрдЯрд▓рд┐рди, рдФрд░ рд╡рд╛рд╡рд░ рдкреНрд▓рдЧрдЗрдиреНрд╕, рд╕рд╛рде рд╣реА рдХреЛрд░ рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрдИ рддрддреНрд╡ рдЬреЗрдбреАрдмреАрдЖрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд╕рдмрдорд┐рд╢рди рдереЗред

@qualidafial рдХрд┐рдпрд╛ред #993

рдзрдиреНрдпрд╡рд╛рдж! #993 . рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛

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