Jdbi: рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб: v2 рд╕реЗ v3 рдорд╛рдЗрдЧреНрд░реЗрд╢рди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЬрдире░ 2017  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jdbi/jdbi

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

рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдиреЛрдЯреНрд╕:

рдирд╛рдорд╛рдВрдХрд┐рдд рд╡рд░реНрдЧ (рдЗрд╕рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЖрдИрдбреАрдИ рдХреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рджреЗрдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ):

  • DBI -> Jdbi
  • IDBI -> Jdbi
  • DBIException -> JdbiException

Jdbi create() рдлрд╝реИрдХреНрдЯрд░реА рдкрджреНрдзрддрд┐ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

ResultSetMapper рдХреЛ RowMapper $ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ map рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрдм рдкрдВрдХреНрддрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред Jdbi 3 рдореЗрдВ ResultSetMapper рдирд╛рдо рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред @Mapper рдХреЛ @UseRowMapper $ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред registerMapper() рдкрд░ Jdbi рдХреЛ registerRowMapper() $ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@BindIn рдХреЛ @BindList #$ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм StringTemplate рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ Jdbi рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдХреЛрдг рдХреЛрд╖реНрдардХ рдХреЛ рдЙрджреНрдзреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ IntelliJ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЯреВрд▓ -> рдбреЗрдЯрд╛рдмреЗрд╕ -> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрдЯрд░реНрди рдХреЗ рддрд╣рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрдЯрд░реНрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред

Query рдореЗрдВ рдЕрдм Map рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ list() рдХреЛ рд╕реАрдзреЗ рдЙрд╕ рдкрд░ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред $#$23 list() #$ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ mapToMap() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

TransactionStatus рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

TransactionConsumer.useTransaction() рдЕрдм рдХреЗрд╡рд▓ Handle рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП TransactionStatus рддрд░реНрдХ рдХреЛ Jdbi рдкрд░ Jdbi useTransaction() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ Handle ред

TransactionCallback.inTransaction() рдЕрдм рдХреЗрд╡рд▓ Handle рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП TransactionStatus рддрд░реНрдХ рдХреЛ Jdbi рдкрд░ Jdbi inTransaction() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ Handle ред

CallbackFailedException рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред HandleConsumer , HandleCallback , TransactionalConsumer , рдФрд░ TransactionalCallback рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрдм рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ) рдПрдХреНрд╕реЗрдкреНрд╢рди рд╣реЗрдВрдбрд▓рд┐рдВрдЧ)ред

SQL рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд░реНрдерди рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд┐рдд Jdbi рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

IntelliJ рдХрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд░рд┐рдлреИрдХреНрдЯрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдХрд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рдерд╛ред

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

рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдиреЛрдЯреНрд╕:

рдирд╛рдорд╛рдВрдХрд┐рдд рд╡рд░реНрдЧ (рдЗрд╕рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЖрдИрдбреАрдИ рдХреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рджреЗрдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ):

  • DBI -> Jdbi
  • IDBI -> Jdbi
  • DBIException -> JdbiException

Jdbi create() рдлрд╝реИрдХреНрдЯрд░реА рдкрджреНрдзрддрд┐ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

ResultSetMapper рдХреЛ RowMapper $ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ map рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрдм рдкрдВрдХреНрддрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред Jdbi 3 рдореЗрдВ ResultSetMapper рдирд╛рдо рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред @Mapper рдХреЛ @UseRowMapper $ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред registerMapper() рдкрд░ Jdbi рдХреЛ registerRowMapper() $ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@BindIn рдХреЛ @BindList #$ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм StringTemplate рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ Jdbi рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдХреЛрдг рдХреЛрд╖реНрдардХ рдХреЛ рдЙрджреНрдзреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ IntelliJ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЯреВрд▓ -> рдбреЗрдЯрд╛рдмреЗрд╕ -> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрдЯрд░реНрди рдХреЗ рддрд╣рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрдЯрд░реНрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред

Query рдореЗрдВ рдЕрдм Map рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ list() рдХреЛ рд╕реАрдзреЗ рдЙрд╕ рдкрд░ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред $#$23 list() #$ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ mapToMap() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

TransactionStatus рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

TransactionConsumer.useTransaction() рдЕрдм рдХреЗрд╡рд▓ Handle рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП TransactionStatus рддрд░реНрдХ рдХреЛ Jdbi рдкрд░ Jdbi useTransaction() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ Handle ред

TransactionCallback.inTransaction() рдЕрдм рдХреЗрд╡рд▓ Handle рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП TransactionStatus рддрд░реНрдХ рдХреЛ Jdbi рдкрд░ Jdbi inTransaction() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ Handle ред

CallbackFailedException рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред HandleConsumer , HandleCallback , TransactionalConsumer , рдФрд░ TransactionalCallback рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрдм рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ) рдПрдХреНрд╕реЗрдкреНрд╢рди рд╣реЗрдВрдбрд▓рд┐рдВрдЧ)ред

SQL рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд░реНрдерди рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд┐рдд Jdbi рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

IntelliJ рдХрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд░рд┐рдлреИрдХреНрдЯрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдХрд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рдерд╛ред

рдзрдиреНрдпрд╡рд╛рдж @electrum рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП! рдпрд╣ рдПрдХ рдмрдбрд╝реА рдорджрдж рд╣реЛрдЧреА

рдореЗрд░реА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рд╕рдореАрдХреНрд╖рд╛ рд╕реЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЛрдЯ:

  • рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ org.jdbi:jdbi -> org. jdbi:jdbi3 , :jdbi3-sqlobject, :jdbi3-guava, рдЖрджрд┐
  • рдХреЛрд░ рдкреИрдХреЗрдЬ рдмрджрд▓рд╛ рдЧрдпрд╛: org.skife.jdbi.v2 -> org.jdbi.v3ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ v2 рдФрд░ v3 рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рд╕рд╛рде рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ
  • рдирд╛рдо рдмрджрд▓рд╛ рдЧрдпрд╛: GetHandle -> SqlObject
  • v3 рддрд░реНрдХ рдФрд░ рдореИрдкрд░ рдХрд╛рд░рдЦрд╛рдиреЗ java.lang.reflect.Type рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ v2 java.lang.Class рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ v3 рдЬрдЯрд┐рд▓ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ v2 рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред
  • v3 рддрд░реНрдХ рдФрд░ рдореИрдкрд░ рдХрд╛рд░рдЦрд╛рдиреЗ рдФрд░ рдПрдХрд▓-рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЬреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред v2 рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрд╡реАрдХрд╛рд░ () рдФрд░ рдмрд┐рд▓реНрдб () рддрд░реАрдХреЗ рдереЗред
  • v3 рдореЗрдВ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВред рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ CGLIB рд╕реЗ java.lang.reflect.Proxy рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
  • SQL рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ @Bind рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ -parameters рд╕рдХреНрд╖рдо рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдСрди-рдбрд┐рдорд╛рдВрдб SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдЦреЗрд▓рддреЗ рд╣реИрдВ рдЬреЛ Iterables рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдСрди-рдбрд┐рдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╣реИрдВрдбрд▓ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рдЖрдкрдХреЗ рд▓рд┐рдП "рджрд░рд╡рд╛рдЬрд╛ рдЦреБрд▓рд╛ рди рд░рдЦреЗрдВ" рддрд╛рдХрд┐ рдЖрдк рдкреБрдирд░рд╛рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрдкрднреЛрдЧ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ v2 рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдХрдиреЗрдХреНрд╢рди рд▓реАрдХ рдХреЗ рдПрдХ рдкреНрд░рдореБрдЦ рд╕реНрд░реЛрдд рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
  • SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдм рдмрдВрдж рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ - рд╡реЗ рдпрд╛ рддреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд╣реИрдВ, рдпрд╛ рдЙрдирдХрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдЙрд╕ рд╣реИрдВрдбрд▓ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдереЗред
  • StatementLocator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рдореБрдЦреНрдп рд╡рд┐рд╡рд░рдг рдЕрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ SQL рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рдорд╛рди рдЕрд╡рдзрд╛рд░рдгрд╛, SqlLocator рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ SQL рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВред

рдПрдХ рдФрд░: StatementRewriter рдХреЛ TemplateEngine рдФрд░ SqlParser рдореЗрдВ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЪрдпрди рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ред рдпрд╣ рдЗрд╕рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛:

List<Map<String, Object>> rs = h.select("select id, name from something");

рдЗрд╕рдХреЗ рд▓рд┐рдпреЗ:

List<Map<String, Object>> rs = h.select("select id, name from something").mapToMap().list();

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ v3 рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рдХреНрддрд┐ рдФрд░ рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреА рдХреАрдордд рдХреЗ рд╕рд╛рде рди рдЖрдПред

рд╣рд╛рдп @javajosh , рд╣рдордиреЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдХреЛ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдореИрдкрд┐рдВрдЧ рдХреЛ Map рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ, рддреЛ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╕ рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡рд┐рдЯреА рдХреЗ рдирд┐рдпрдо рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп Map рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╣рдореЗрд╢рд╛ рдЫреЛрдЯреЗ рдкрд░рд┐рдгрд╛рдо рд╡рд░реНрдЧ (рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░/рдлрд╝реАрд▓реНрдб/рдкреНрд░реЙрдкрд░реНрдЯреА рдореИрдкрд░реНрд╕ рдФрд░ рдмрд╛рдЗрдВрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рд╣рдореЗрд╢рд╛ Map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреВрдВрдЧрд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ?

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

@javajosh рдЖрдк https://github.com/jdbi/jdbi/pull/925 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

@stevenschlansker рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм #928 рдерд╛?

@stevenschlansker рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реБрдзрд╛рд░! рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА v2 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИред :) рдпрд╣ рдорд╛рд╡реЗрди, рдЖрджрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛рд▓рддрд╛ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИред рдореИрдВ рдмрд╕ JDBI рдХреЛ JUnit рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛, рдЬрд┐рд╕рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ v4 рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдереАрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдереА v3 рдФрд░ v3 "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ "withHandle" рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╣реА рднрд╛рд╡рдирд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕рднреА рд▓рдЯрдХрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВрдбрд▓ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рд╡реГрддреНрддрд┐ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ)ред

@javajosh рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА Jdbi.open() рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

v2 рд╕реЗ v3 рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдбреЙрдХреНрд╕ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИред

@javajosh ResultBearing.list() рд╡рд┐рдзрд┐ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реИ рдЬреЛ List<Map<String,Object>> рд▓реМрдЯрд╛рддрд╛ рд╣реИ: рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛, рдЦрд╛рд╕рдХрд░ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдореЗрдВ рджреЗрд░ рд╕реЗред

рдореИрдВ рдХреНрд░рд┐рдпрд╛рддреНрдордХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреНрд░рд┐рдпрд╛рддреНрдордХрддрд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ:

handle.createQuery(sql)
    .mapToMap()
    .list()

рдкрд╛рдардХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ:

handle.createQuery(sql)
    .list()

рдпрд╣ рдПрдХ рдирд╛рдЬреБрдХ рдмрд╛рдд рд╣реИ, рдФрд░ рдореИрдВ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЪреБрдирдиреЗ рд╕реЗ рдИрд░реНрд╖реНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред JDBI рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╢рдмреНрджрд╢рдГ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ; рдХреНрдпрд╛ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдлреИрд╕рд▓реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реВрдВ! рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рдд рдХрд╛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЫреЛрдЯреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдпрд╛ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

nonameplum picture nonameplum  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dhardtke picture dhardtke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

electrum picture electrum  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Shujito picture Shujito  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stevenschlansker picture stevenschlansker  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ