Jdbi: @CreateSqlObject рдХреЛ рдХрдо рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдмрдирд╛рдПрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдлрд╝рд░ре░ 2018  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jdbi/jdbi

рдореБрд╕реАрдмрдд
JDBI рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ @CreateSqlObject рдПрдиреЛрдЯреЗрд╢рди рдЕрд▓рдЧ-рдЕрд▓рдЧ DAO рдХреЗ рд▓рд┐рдП рд▓реЗрди-рджреЗрди рд╕рдВрдмрдВрдзреА рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рддрдВрддреНрд░ рд╣реИред

http://jdbi.org/#__createsqlobject

рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ w/рдкрд╕рдВрджреАрджрд╛ jdbi.onDemand рдирд┐рд░реНрдорд╛рдг рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд░рд╛рдЬреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рднреНрд░рдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд░рдо рдореЗрдВ рдХреБрдЫ рд╕рдВрджреЗрд╢ рдЖрдП рд╣реИрдВ:

рдирд┐рд╡реЗрджрди
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:

  • рдкреНрд░рддрд┐рд╡рд╛рдж
  • рдХрдорд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмреЗрд╣рддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг
  • рдПрдХрд╛рдзрд┐рдХ рдбреАрдПрдУ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди, рд▓реЗрдХрд┐рди рддрд╛рд░реНрдХрд┐рдХ рд▓реЗрдирджреЗрди рд╕рдВрдмрдВрдзреА рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓реЗрдирджреЗрди рдХреЗ рдорд┐рд╢реНрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВред
cleanup improvement

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

рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд░реЛрдб рдореИрдк рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛?

рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднреНрд░рдо рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рдХреБрдЫ рдЬрд┐рд╕реЗ рд╣рдо рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ :)

(рдЬреИрд╕рд╛ рдХрд┐ @svlada рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ @Transactional рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрдо рд╣реИ)

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рдпрд╣ рд╕рдм рдЖрдкрдХреЗ DI рдврд╛рдВрдЪреЗ (рдЬреИрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ) рдореЗрдВ AOP рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ JDBI рдЖрдкрдХреЗ рд╕рднреА рд╕реЗрд╡рд╛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ "рд░реИрдк" рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП AOP- рдЬреИрд╕реЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреБрд░рд╛рдиреЗ cglib рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ @Transactional рдХреЛ рд╕реНрд╡рдпрдВ рджрд╛рд╕ рдкрд░ рд╣реА рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛, рдпрд╣ рдХрднреА рднреА рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред

рдпрджрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛, рддреЛ рд╣рдо рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд▓реЗрдирджреЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░/рдпрд╛ рдЧреБрдЗрд╕ рдПрдУрдкреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ core рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП spring рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореБрдЦреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреВрджрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдпреЛрдЧрджрд╛рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ "рдХреНрд▓реАрдирд░" рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░реЗ?

рд╣рдордиреЗ рдЕрдзрд┐рдХрддрд░ рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ cglib рд╕реЗ Proxy рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - Proxy рдПрдХ рд╕рдорд░реНрдерд┐рдд jdk рдПрдкреАрдЖрдИ рд╣реИ, рдЬрдмрдХрд┐ cglib (рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ asm ) рд╣рд░ рдмрдбрд╝реА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ 8, 9, 11, ... рдХреЛ рдЯреВрдЯ рдЧрдпрд╛) рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рд░рдЦрд░рдЦрд╛рд╡ рд╕рд┐рд░рджрд░реНрдж рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

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

рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрддрдирд╛ рдЦрд░рд╛рдм рд╣реИ рдХрд┐ рд╣рдо 3.x рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдореЗрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдпрд╣рд╛рдВ рднреЗрдЬрдиреЗ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВред

рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП _why_ @CreateSqlObject рдСрди-рдбрд┐рдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдЦреЗрд▓рддрд╛ рд╣реИ:

  • рдСрди-рдбрд┐рдорд╛рдВрдб рдПрдХ рдХреЛрд░-рд▓реЗрд╡рд▓ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдХреЛрдИ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИрдВрдбрд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд░рд┐рдЯрд░реНрди рдХреЗ рдмрд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • @CreateSqlObject рдХреЛ рдореВрд▓ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмреИрдХрд┐рдВрдЧ рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде handle.attach(sqlObjectType) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрдирд╛рдП рдЧрдП SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмреИрдХрд┐рдВрдЧ рд╣реИрдВрдбрд▓ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрддреНрдерд░ рдореЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдЕрднреА рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛... onDemand рдФрд░ CreateSqlObject рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХрднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ, рдФрд░ @qualidafial рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЭреБрдХрд╛ рд░рд╣рд╛ рд╣реИ ...

image

fooProxy.usecase рдкрд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Foo.usecase createSqlObject рдореЗрдердб рдмрд╛рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдХрд░рдВрдЯ ( usecase рдХреЗ) рд╣реИрдВрдбрд▓ рд╕реЗ рдЕрдЯреИрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рдмрд╛рд░ рджреЗрддрд╛ рд╣реИред usecase рд╡рд╛рдкрд╕ рдЖрдиреЗ рдкрд░ usecase рдХрд╛ рд╣реИрдВрдбрд▓ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рддрдХ рдЖрдк рдмрд╛рд░ рд▓реМрдЯрд╛рдП рдЧрдП рдмрд╛рд░ рдХреЗ рд╕рд╛рде рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрд╛рд░ рдХрд╛ рд╣реИрдВрдбрд▓ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХреИрд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? bar рдХрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдФрд░ рдЙрдкрдпреЛрдЧ Foo.usecase рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣реИрдВрдбрд▓ рд╣реИ...

рдореИрдВ JDBI рдХреЗ рдЖрдВрддрд░рд┐рдХ рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред

рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдирд┐рдЪрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪреАрдЬреЗрдВ рдареАрдХ рдереАрдВред рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрдврд╝реЗ рд╣реБрдП рднрд╛рд░ рдХреЗ рд╕рд╛рде, рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ SQL рдХрдерди рдЙрдЪрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдиреЛрдб рдХреЗ рд╡рд┐рд░реБрджреНрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрди рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдХреЛ рд╣рд┐рдЯ рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдПрдХ рдкрдарди рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рд╣рд┐рдЯ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреА рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмреАрдЪ рдореЗрдВ рдереАред

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @CreateSqlObject рдиреЗ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛рдИ - рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рдЕрдиреБрд░реЛрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдзреНрд╡рдЬ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рдХреЛ "рд╕рдорд╛рдзрд╛рди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╣рдордиреЗ @CreateSqlObject рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реБрдЖ:

  • class FooDao
  • class BarDao
  • class CombinedDao extends FooDao, BarDao

рдФрд░ рдлрд┐рд░ рд╣рдо jdbi.onDemand(CombinedDao) рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЙрд╕ рдкреИрдЯрд░реНрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛, рдЬрдмрдХрд┐ рдЙрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рдерд╛, рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛ред

рдХреЗрд╡рд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдореИрдВ JDBI 2 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд╕рднреА рдХреЛрдб рдЗрд╕ рд╕рдордп рдЕрдореВрд░реНрдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдСрди рдбрд┐рдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЦреБрд╢ рд░рд╣реВрдБрдЧрд╛!

рдореЗрд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддрд░реНрдХ рдпреБрдХреНрдд рдЕрдореВрд░реНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдПрд╕рдХреНрдпреВрдПрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдирджреЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде, CreateSqlObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреАрдПрдУ рдХрдХреНрд╖рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд╕рдХреНрдпреВрдПрд▓ рд╣реИрдВред рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг:

рдЗрдВрдЯрд░рдлреЗрд╕

public interface AccountService {
    void addAccount(Account account, User user);
}  

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

public abstract class AccountServiceJdbi implements AccountService {

    <strong i="11">@Override</strong>  
    <strong i="12">@Transaction</strong>  
    public final void addAccount(@BindBean() Account account, User user) {
        long accountId =  accountDao().insertAccount(account);
        accountDao().linkAccountToOwner(accountId, user.getId());
    }

    <strong i="13">@CreateSqlObject</strong>
    abstract AccountDao accountDao();
}

(рдЖрдк рджрд╛рдУ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

рдпрд╣ рдХрдИ рдбреАрдПрдУ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд▓реЗрдирджреЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реБрдП рддрд░реНрдХ рдФрд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЕрд▓рдЧрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдбреАрдПрдУ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореИрдВрдиреЗ рдЬреЗрдбреАрдмреАрдЖрдИ 3 рдореЗрдВ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддрд░реНрдХ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдмрд╕ рдЙрддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдХрдо рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдВрддрд┐рдо рд▓реЗрди-рджреЗрди рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП JDBI 3 рдореЗрдВ рд╕рдВрд░рдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдк _can_ рд╣рд╛рд▓рд╛рдВрдХрд┐ @SqlQuery , @SqlUpdate , рдЖрджрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ SQL рд╡рд┐рдзрд┐ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк _can_ рд╣рд╛рд▓рд╛рдВрдХрд┐ @SqlQuery , @SqlUpdate , рдЖрджрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ SQL рд╡рд┐рдзрд┐ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдореИрдВ рдХрд╛рдлреА рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдХреИрд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИред рдПрдХрд╛рдзрд┐рдХ рдбреАрдПрдУ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ?

рдПрдХрд╛рдзрд┐рдХ рдбреАрдПрдУ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХрд╛ рддрд░реАрдХрд╛, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ?

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ

interface Dao1 {
  @SqlQuery("...")
  void query1();
}

interface Dao2 {
  @SqlQuery("...")
  void query2();
}

interface JdbiServiceImpl extends Service {
  <strong i="8">@CreateSqlObject</strong>
  Dao1 dao1();
  <strong i="9">@CreateSqlObject</strong>
  Dao2 dao2();

  <strong i="10">@Transaction</strong>
  <strong i="11">@Override</strong>
  void businessCase() {
    dao1().query1();
    dao2().query2();
  }
}

Service service = handle.attach(JdbiServiceImpl.class);
service.businessCase();

рдЗрд╕ рддрд░рд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред @CreateSqlObject рдореВрд▓ рд░реВрдк рд╕реЗ рдЧреЗрдЯрд░/рд╕реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд╕рдВрдд рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рддрд░рд╣ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд╡рд╕рдВрдд рд╕рдВрджрд░реНрдн рдкрд░ рд╕реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдСрди рдбрд┐рдорд╛рдВрдб рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдбрд╛рд▓рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рдпрдорд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЙрд▓рд░реНрд╕ рдХреЛ рдЬреЗрдбреАрдмреАрдЖрдИ рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

image

рдЖрдк рдЬреЛ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди-рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА StockReductionCase рдЪреАрдЬрд╝ рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд╣ CreateSqlObject рдХреЗ рд╕рд╛рде рдиреЗрд╕реНрдЯреЗрдб jdbi "рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди" рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд░рд╣, рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЗрд╕рдХреА рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕реЗрд╡рд╛ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдХреЗрд╕ (рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ) рд╕реЗрд╡рд╛рдУрдВ (рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЧреИрд░-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрд░реНрдХ) рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдпрд╛ рддреЛ рдбрд╛рд▓рдХрд░ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред

image

рдореИрдВрдиреЗ @CreateSqlObject рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рд╕рдлрд▓рддрд╛ рдХреА рдорд┐рд╢реНрд░рд┐рдд рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рд╕реБрдиреА рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм onDemand() рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрддред

рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ SQL рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ Handle.inTransaction() рдпрд╛ Jdbi.inTransaction() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЗрдирджреЗрди рдЪрд▓рд╛рдирд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░, Handle.attach() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдбреАрдПрдУ рд╣реИрдВрдбрд▓ рдХреЗ рд▓реЗрдирджреЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛:

jdbi.useTransaction(handle -> {
  Dao1 dao1 = handle.attach(Dao1.class);
  Dao2 dao2 = handle.attach(Dao2.class);

  dao1.doStuff();
  dao2.doMoreStuff();
});

рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
@qualidafial рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдбрд╛рдУрд╕ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирдХрд▓реА рдбрд╛рдУрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

@TheRealMarnes рднреА рдзрдиреНрдпрд╡рд╛рдж - рдпрд╣ рд╡рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдореБрдЭреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@qualidafial рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо jdbi рдХреЗ @Transaction рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ dao рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

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

@svlada @Transaction рдПрдиреЛрдЯреЗрд╢рди _only_ SQL рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк "рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ" рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЗрдбреАрдмреАрдЖрдИ рдХреЗ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд░реНрдЧред

рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

<strong i="9">@Test</strong>
public void testInsertAndFind() {
    Foo foo = handle.attach(Foo.class);
    Something s = foo.insertAndFind(1, "Stephane");
    assertThat(s).isEqualTo(new Something(1, "Stephane"));
}

<strong i="10">@Test</strong>
public void testTransactionPropagates() {
    Foo foo = dbRule.getJdbi().open().attach(Foo.class);

    assertThatExceptionOfType(Exception.class)
        .isThrownBy(() -> foo.insertAndFail(1, "Jeff"));

    Something n = foo.createBar().findById(1);
    assertThat(n).isNull();
}

public interface Foo {
    <strong i="11">@CreateSqlObject</strong>
    Bar createBar();

    @SqlUpdate("insert into something (id, name) values (:id, :name)")
    int insert(@Bind("id") int id, @Bind("name") String name);

    <strong i="12">@Transaction</strong>
    default Something insertAndFind(int id, String name) {
        insert(id, name);
        return createBar().findById(id);
    }

    <strong i="13">@Transaction</strong>
    default Something insertAndFail(int id, String name) {
        insert(id, name);
        return createBar().explode();
    }
}

public interface Bar {
    @SqlQuery("select id, name from something where id = :id")
    Something findById(@Bind("id") int id);

    default Something explode() {
        throw new RuntimeException();
    }
}

рдореИрдВ onDemand() + @CreateSqlObject рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  • @CreateSqlObject рдбреАрдПрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдбреАрдПрдУ рдХреЗ рдЕрдВрджрд░ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛ - рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИред
  • fooDao.createBar().findById() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реИред

рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд░реЛрдб рдореИрдк рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛?

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

@tamslinn рдЬрд╣рд╛рдБ рддрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрд╕ рдирд┐рд░реНрдгрдп рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдПрдВрдЧреЗред Jdbi3 jdk рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ cglib рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдпреЛрдЧрджрд╛рди рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╡рд╛рд▓ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ sqlobject рд╕реНрд╡рдпрдВрд╕рд┐рджреНрдз рдЖрдкрдХреЛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╕реВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ jdbi рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Jdbi рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдорд╛рд░реЗ рд▓реЗрди-рджреЗрди рд╕рдорд░реНрдерди, рдСрди рдбрд┐рдорд╛рдВрдб, рдЖрджрд┐ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдореВрд▓ рд╡рд┐рд╖рдп рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареЛрд╕ рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрдорд╛ рдЬреЗрдбреАрдмреАрдЖрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рд▓реЗрдирджреЗрди рд╢реБрд░реВ/рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред
(рдЬреИрд╕рд╛ рдХрд┐ @svlada рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ @Transactional рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрдо рд╣реИ)
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ JDBI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЖрдКрдВ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВ :)

рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд░реЛрдб рдореИрдк рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛?

рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднреНрд░рдо рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рдХреБрдЫ рдЬрд┐рд╕реЗ рд╣рдо рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ :)

(рдЬреИрд╕рд╛ рдХрд┐ @svlada рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ @Transactional рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрдо рд╣реИ)

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рдпрд╣ рд╕рдм рдЖрдкрдХреЗ DI рдврд╛рдВрдЪреЗ (рдЬреИрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ) рдореЗрдВ AOP рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ JDBI рдЖрдкрдХреЗ рд╕рднреА рд╕реЗрд╡рд╛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ "рд░реИрдк" рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП AOP- рдЬреИрд╕реЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреБрд░рд╛рдиреЗ cglib рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ @Transactional рдХреЛ рд╕реНрд╡рдпрдВ рджрд╛рд╕ рдкрд░ рд╣реА рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛, рдпрд╣ рдХрднреА рднреА рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред

рдпрджрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛, рддреЛ рд╣рдо рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд▓реЗрдирджреЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░/рдпрд╛ рдЧреБрдЗрд╕ рдПрдУрдкреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ core рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП spring рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореБрдЦреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреВрджрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдпреЛрдЧрджрд╛рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ "рдХреНрд▓реАрдирд░" рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░реЗ?

рд╣рдордиреЗ рдЕрдзрд┐рдХрддрд░ рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ cglib рд╕реЗ Proxy рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - Proxy рдПрдХ рд╕рдорд░реНрдерд┐рдд jdk рдПрдкреАрдЖрдИ рд╣реИ, рдЬрдмрдХрд┐ cglib (рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ asm ) рд╣рд░ рдмрдбрд╝реА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ 8, 9, 11, ... рдХреЛ рдЯреВрдЯ рдЧрдпрд╛) рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рд░рдЦрд░рдЦрд╛рд╡ рд╕рд┐рд░рджрд░реНрдж рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рд╢рд╛рдпрдж https://github.com/jdbi/jdbi/pull/1252 рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ?

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

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

рдореИрдВ рдЕрдм рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рдореБрдЭреЗ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддреЛ рдореИрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реВрдВрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрджрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

         try (Handle handle = jdbi.open()) {
                handle.useTransaction(h -> {
                    AccountService accountService = new AccountServiceImpl(h.attach(AccountDao.class));                    
                    accountService.addAccount(a, u);
                });
          }

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

рдЖрдкрдХреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░: рдЖрдк try рдмреНрд▓реЙрдХ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ jdbi.useTransaction() рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╣реИрдВрдбрд▓ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред

рд╣рд╛рдп рд╕рдм рд▓реЛрдЧ, рдПрдХ рдкреАрдЖрд░ # 1579 рд╣реИ - рдЬреЗрдбреАрдмреАрдЖрдИ 3.10.0 рдХреЗ рд░реВрдк рдореЗрдВ, CreateSqlObject рдФрд░ рдСрди рдбрд┐рдорд╛рдВрдб (рдЖрдЦрд┐рд░рдХрд╛рд░) рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

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