Jdbi: ZonedDateTime рдХреЗ рд▓рд┐рдП рдмрд┐рд▓рд┐рди рдореИрдкрд░ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ

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

ZonedDateTime рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореИрдкрд░ рдореМрдЬреВрдж рд╣реИ рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ SQL рдХрд╛ TIMESTAMP WITH TIME ZONE рд╕реАрдзреЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдкрд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╝реЛрди-рдЕрд╡реЗрдпрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдкрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЬреЛ рдЬрд╝реЛрди-рдЕрдирдЬрд╛рди рд╣реИ, рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред

bug feature improvement

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

рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдореИрдВ @findepi рд╕реЗ рд╕рд╣рдордд

рдореИрдВ рдЯреЗрд╕реНрдЯ рд░рди рдХреЗ рджреМрд░рд╛рди рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗрдбреАрдмреАрдЖрдИ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЦреБрдж рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ-рдЬрдм рдЬреЗрдбреАрдмреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореИрдкрд░ рдЪреБрдкрдХреЗ рд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реАред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдбреАрдмреА (рдПрдЪрдПрд╕рдХреНрд▓рдбреАрдмреА) рдФрд░ рдЬреЗрдбреАрдмреАрдЖрдИ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрджреНрдзрддрд╛/рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдбреАрдмреАрдЖрдИ рдореИрдкрд░реНрд╕/рддрд░реНрдХ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЕрдм рдХрдИ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдЪрдПрд╕рдХреНрд▓рдбреАрдмреА рдХреЗ рдкрд╛рд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж (рд╡рд┐рд╢рд╛рд▓ рдмрдЧ)ред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрд╝реЛрди/рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд╕рд╛рде java.time рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрднреА рдХрд┐рдпрд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд╡реЗ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдорд╛рдиреЛрдВ рдкрд░ рдСрдлрд╝рд╕реЗрдЯ/рдЬрд╝реЛрди рд░реАрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЗрдбреАрдмреАрдЖрдИ рдХреА рдореИрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд▓рд┐рдП, hsqldb рдмрдЧреНрд╕ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЙрди рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдореИрдкрд░реНрд╕ рдХреЛ jdbi3 рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╡рд┐рдХреНрд░реЗрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ (jdbi3-hsqldb рдФрд░ рдЕрдиреНрдп) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдореИрдВ рд╕реНрд╡рдпрдВ jdbi-hsqldb рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореИрдкрд░ рдФрд░ рддрд░реНрдХ рд▓рд┐рдЦреЗ рд╣реИрдВред

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

рдЖрдк рд╕рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рдЬреЗрдбреАрдмреАрд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рд╕рднреА java.time рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ java.util рдпрд╛ java.sql рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдореЗрдВ рд╕рдордп рдХреНрд╖реЗрддреНрд░/рдСрдлрд╕реЗрдЯ рдбреЗрдЯрд╛ рдХреА рдХрдореА рд╣реИред

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ, рдХреНрдпрд╛ рдЖрдк рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ TIME ZONE рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ TIMESTAMP рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ TIME ZONE рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ TIMESTAMP рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдореЗрдВ рдЬрдирддрд╛ рд╣реБрдБред (рдЕрдиреНрдпрдерд╛ рдмрд╣реБрдд рдорд╛рдирдХ-рдЕрдиреБрдкрд╛рд▓рди рдбреЗрдЯрд╛рдмреЗрд╕ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рдирд┐рд░рд╛рд╢рд╛ред)

рдЖрдк рд╕рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рдЬреЗрдбреАрдмреАрд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ JDBI H2 рдХреЗ org.h2.api.TimestampWithTimeZone рдХреЛ рдЦреАрдВрдЪреЗрдЧрд╛, рдмрд┐рдирд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ, _somehow_ред
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ TIMESTAMP W/TZ рдорд╛рди рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА "рдкреЛрд░реНрдЯреЗрдмрд▓" (рд╡рд┐рднрд┐рдиреНрди рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ) рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╛рдиреА IMO рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореИрдкрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ZonedDateTime ред рдЕрдиреНрдпрдерд╛ рдЖрдк рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреА рддрд░рд╣ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рд╡рд╣ рдирд╣реАрдВ рдЬреЛ рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ZonedDateTime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рдмрдЬрд╛рдп рдРрдк рд╕рд░реНрд╡рд░ рдХреЗ рдЯрд╛рдЗрдордЬрд╝реЛрди рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡реИрд╕реЗ, рдбреНрд░реЙрдкрд╡рд┐рдЬрд╝рд╛рд░реНрдб JDBI2 рдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ: https://github.com/dropwizard/dropwizard/blob/master/dropwizard-jdbi/src/main/java /io/dropwizard/jdbi/args/ZonedDateTimeMapper.java

рдпрджрд┐ рдЖрдк H2 рдХреЗ рд╕рд╛рде ZonedDateTime рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

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

@arteam , рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ - рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, AFAIR https://github.com/jdbi/jdbi/blob/master/core/src/main/java/org/jdbi/v3/core/mapper/BuiltInMapperFactory.java#L182 H2 рдкрд░ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред TS w TZ, рдХреНрдпреЛрдВрдХрд┐ rs.getTimestamp(..) рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк H2 рдХреЗ рд╕рд╛рде ZonedDateTime рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдореИрдВ рдХрд┐рд╕реА рднреА рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ - рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ (org.h2.api.TimestampWithTimeZone) rs.getObject(..) рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдУрд░реЗрдХрд▓ рдпрд╣ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдУрд░реЗрдХрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рдеред

рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рд╕рд╣реА рдкрд░рд┐рд╡рд░реНрддрди (рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╕реЗ LocalDateTime ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ _forced_ рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдЬрд╝реЛрди-рдЖрдИрдПрдирдЬреА" рдЬреЛрдбрд╝реВрдВрдЧрд╛ред

рдЖрдк рдЕрд╕рд╣рдордд рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдХрд╛ рдЯрд╛рдЗрдордЬрд╝реЛрди == рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд╛ рдЯрд╛рдЗрдордЬрд╝реЛрди, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рд╕рдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдмреЗрдореЗрд▓ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ TZ-рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдареАрдХ рд╕рдордЭреМрддрд╛ рд╣реЛрдЧрд╛?

рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЗрддрдиреА рдЬрд▓реНрджреА рдХреНрдпреЛрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕реЗ рд╕рднреА рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐-рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдкрд░ рдФрд░ рддрд░реНрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдЬреЛ рдЬреЗрдбреАрдмреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╢рд┐рдк рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдПрдХ рдФрд░ рдореИрдкрд░/рддрд░реНрдХ рджрд░реНрдЬ рдХрд░рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрдВрдЬреАрдХреГрдд (рдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░) рдЬреАрддрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк PostgresPlugin рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ JavaTimeMapperFactory рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ ResultSet.getObject(Class) рд▓рд┐рдП LocalDate , LocalTime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореИрдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред LocalDateTime рдФрд░ OffsetDateTime , рдЬреЛ рд╕реАрдзреЗ Postgres JDBC рдбреНрд░рд╛рдЗрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

рдпрджрд┐ H2 рдХреЗ рдкрд╛рд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗ рдмрд┐рдирд╛ ZonedDateTime рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдореИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП H2DatabasePlugin рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ , рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреА рдЪрд░реНрдЪрд╛ рд╣реЛрдиреА рд╣реИ, рдФрд░

рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рдХреЙрдиреНрд╡реЛ рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ jdbi рдЯреАрдо рдХреЛ рдПрдХ jdbi3-hsqldb рд╕рдмрдкреНрд░реЛрдЬреЗрдХреНрдЯ/рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ/... рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ hsqldb рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдФрд░ рдореИрдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рд╕реАрдзреЗ setObject/getObject рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ java.time рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ) рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рд░реВрдкрд╛рдВрддрд░рдг)?

рдмрд┐рд▓реНрдХреБрд▓ред

рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдореИрдВ @findepi рд╕реЗ рд╕рд╣рдордд

рдореИрдВ рдЯреЗрд╕реНрдЯ рд░рди рдХреЗ рджреМрд░рд╛рди рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗрдбреАрдмреАрдЖрдИ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЦреБрдж рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ-рдЬрдм рдЬреЗрдбреАрдмреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореИрдкрд░ рдЪреБрдкрдХреЗ рд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реАред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдбреАрдмреА (рдПрдЪрдПрд╕рдХреНрд▓рдбреАрдмреА) рдФрд░ рдЬреЗрдбреАрдмреАрдЖрдИ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрджреНрдзрддрд╛/рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдбреАрдмреАрдЖрдИ рдореИрдкрд░реНрд╕/рддрд░реНрдХ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЕрдм рдХрдИ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдЪрдПрд╕рдХреНрд▓рдбреАрдмреА рдХреЗ рдкрд╛рд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж (рд╡рд┐рд╢рд╛рд▓ рдмрдЧ)ред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрд╝реЛрди/рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд╕рд╛рде java.time рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрднреА рдХрд┐рдпрд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд╡реЗ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдорд╛рдиреЛрдВ рдкрд░ рдСрдлрд╝рд╕реЗрдЯ/рдЬрд╝реЛрди рд░реАрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЗрдбреАрдмреАрдЖрдИ рдХреА рдореИрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд▓рд┐рдП, hsqldb рдмрдЧреНрд╕ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЙрди рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдореИрдкрд░реНрд╕ рдХреЛ jdbi3 рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╡рд┐рдХреНрд░реЗрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ (jdbi3-hsqldb рдФрд░ рдЕрдиреНрдп) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдореИрдВ рд╕реНрд╡рдпрдВ jdbi-hsqldb рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореИрдкрд░ рдФрд░ рддрд░реНрдХ рд▓рд┐рдЦреЗ рд╣реИрдВред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╢рд╛рдпрдж рд╕рдордЭрджрд╛рд░ рд░рд╛рд╕реНрддрд╛ рд╣реЛрддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ v3 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд┐рд▓реНрд▓реА рдмреИрдЧ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЗрди рдореИрдкрд░ рдпрд╛ рддрд░реНрдХ рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ рдЬреЛ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред

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

@TheRealMarnes рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлреАрдЪрд░ рдХреЛ рд╣рдЯрд╛рдирд╛ (рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рд╕рд╣рдордд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рд▓реЛрдЧ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХреЛ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ (рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ)ред рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЗрд╕реЗ v3 рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрджрд╛рд╡рдирдд рдХрд░реЗрдВрдЧреЗ (рдпрд╣рд╛рдВ рдмрд╣рд┐рд╖реНрдХрд░рдг рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ) рдФрд░ v4 рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ , рд▓реЛрдЧреЛрдВ рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕ / рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб рдкрдврд╝рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдХреЛ рджреБрдЦреА рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрдд рд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рд╕реЗ рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕/рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб рдкрдврд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИ... рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рдорд╛рдореВрд▓реА рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред Jdbi3 рд╣реА рдирдИ рдЧрд╛рдЗрдб рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ jdbi2 рд╕реЗ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрди рдореИрдкрд░реНрд╕/рддрд░реНрдХреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдкреАрдЫреЗ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдмрд╢рд░реНрддреЗ рдЙрдиреНрд╣реЗрдВ рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рдПрдХ-рд▓рд╛рдЗрдирд░ рдерд╛ - рд╢рд╛рдпрдж рдЙрди рдореИрдкрд░реНрд╕ рдХреЛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ?

рдПрдХ рдЧреИрд░-рд╡рд┐рдХреНрд░реЗрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ jdbi3-core-experimental ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░рд╛ рдмреБрд░рд╛, рдЖрдкрдХрд╛ рдорддрд▓рдм jdbi.installPlugin(new ExperimentalMappersPlugin())

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 'рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ' рдирд╣реАрдВ рд╣реИрдВред

TimezoneInрд╕рдВрд╡реЗрджрдирд╢реАрд▓JavaTimeMappers рддрдм :P

рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдкрд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рддрд░реНрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рднреА рд╣реИрдВред

JavaTimeYoloTZPlugin рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ: рдкрд▓рдХ:

рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕реЗ рд╕рднреА рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐-рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@qualidafial рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ рдХрд┐ Java8 рдХреЗ рдмрд╛рдж рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рджрд┐рдирд╛рдВрдХ/рд╕рдордп рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрднрд░рддрд╛ рд╣реБрдЖ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереЛрдбрд╝рд╛ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐:

  • рдореИрдВрдиреЗ JDBI рдХреЗ TIMESTAMP WITH TIME ZONE рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ ZonedDateTime , рдЬреЛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
  • рд╕рднреА JDBC API рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ TIMESTAMP , DATE , TIME рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА java.sql.{Timestamp,Date,Time} рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╕рднреА рд╡рд░реНрдЧ java.util.Date рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИрдВред рдХрд┐рд╕реА рдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреИрд╕реЗ Calendar рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ java.util.Date рдХреА рд╕рд╛рд▓/рдорд╣реАрдиреЗ/рджрд┐рди/рдШрдВрдЯрд╛/рдорд┐рдирдЯ/рд╕реЗрдХрдВрдб рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдПрдХ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП (рдФрд░ рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ Calendar рдиреЗ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛)ред

    • рдпрджрд┐ рдЖрдкрдХреЗ _JVM рд╕рдордп рдХреНрд╖реЗрддреНрд░_ рдиреЗ рдРрд╕рд╛ рд╕реНрдерд╛рдиреАрдп рд╕рдордп рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ java.sql.Timestamp рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдпреВрдПрд╕ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдРрдк рдХреБрдЫ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 2017-03-26 02:30:00 (рдЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛!) рдХрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрд░реЛрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рдПрдХ рдРрдк (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Europe/Berlin JVM рдЬрд╝реЛрди рдХреЗ рд░реВрдк рдореЗрдВ) рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЗрд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рдордп рдпреВрд░реЛрдк рдореЗрдВ рдбреАрдПрд╕рдЯреА рдерд╛ред

    • рдУрд╣, рд╡рд╣реА java.sql.Date рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╡рд░реНрдЧ рд╣реИред java.sql.Date рддрд╛рд░реАрдЦ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЖрдзреА рд░рд╛рдд рдХреЛ java.sql.Timestamp рдерд╛, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдзреА рд░рд╛рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдордзреНрдпрд░рд╛рддреНрд░рд┐ рдореЗрдВ (рдпрд╛ рддреЛ рд╡рд░реНрддрдорд╛рди рдпрд╛ рдЕрддреАрдд рдореЗрдВ) рдбреАрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред

    • рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ java.sql.Time рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдореБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 1970-01-01 рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рд╕рдордп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬреЛ рдЙрд╕ рддрд┐рдерд┐ рдкрд░ рдиреАрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рдереЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП America/Bahia_Banderas , America/Hermosillo )ред рдпрджрд┐ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ JVM рдПрдХ рд╣реИ, рддреЛ JDBC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд TIME рдорд╛рдиреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЬреЗрдбреАрдмреАрд╕реА рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирдИ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЧреИрд░-рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЧрд▓рдд рд╣реИ:

  • ~ resultSet.getTimestamp(col).toLocalDateTime() ~
  • ~ resultSet.getDate(col).toLocalDate() ~
  • ~ resultSet.getTime(col).toLocalTime() ~

рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рддрд╛рд░реАрдЦ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЕрдЧрд░ JVM рдХреНрд╖реЗрддреНрд░ Pacific/Apia рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рддрд┐рдерд┐ 2011-12-30 ;)

рдЕрдм, рдЙрднрд░рддреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдПред ResultSet рдореЗрдВ рдпрд╣ рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдп API рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк JDBC рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ:

  • resultSet.getObject(col, LocalDateTime.class) // for TIMESTAMP
  • resultSet.getObject(col, LocalDate.class) // for DATE
  • resultSet.getObject(col, LocalTime.class) // for TIME
  • resultSet.getObject(col, ZonedDateTime.class) // for TIMESTAMP WITH TIME ZONE

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ PostgreSQL, MySQL, Oracle рдФрд░ H2 рдХреЗ рд▓рд┐рдП JDBC рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░, рдЬрд╛рджреВ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд "рдЬреЗрд╡реАрдПрдо рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡" рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
рднрд▓реЗ рд╣реА рдпрд╣ рд░реВрдкрд╛рдВрддрд░рдг рдЕрднреА рддрдХ SQL рд╕рд░реНрд╡рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬрд╛рд╡рд╛ рдЯрд╛рдЗрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП _the_ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореИрдкрд┐рдВрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЬреЗрдбреАрдмреАрдЖрдИ рдЬрд╣рд╛рдЬреЛрдВред

рдзреНрдпрд╛рди рджреЗрдВ:
рдЬреЗрдбреАрдмреАрд╕реА 4.2 рд╕реНрдкреЗрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ PreparedStatement.setObject рдФрд░ RowSet.setObject рдЬрд╛рд╡рд╛ рдЯрд╛рдЗрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ! рдореЗрд░реА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЧреВрдврд╝ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдкрд░ рдЙрдЪрд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирд╛рдо рдкрд░ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХреЗрдВ ...

@stevenschlansker рдЖрдк рд╕рд╣реА рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ JDBI рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ

  • рдореИрдкрд┐рдВрдЧ рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреБрдХреНрдд рдХрдореЗрдВрдЯреНрд░реА (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдЯрдХреНрдХрд░)

рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░рдЦреЗрдВ, рд╣рдордиреЗ рдЕрднреА 3 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рдорд╛рдирддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ ...;)

рдореИрдВ рдЬреЛ рд╕реБрди рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

  • рдореМрдЬреВрджрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд java.time рдореИрдкрд░реНрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ (рдореБрдЭреЗ YoloTimePlugin )
  • рдЙрдирдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирдП рдмрд┐рд▓реНрдЯ-рдЗрди рдореИрдкрд░ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ java.sql рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп ResultSet.getObject(column, type) рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ рдЗрд╕ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЧрдВрджрдЧреА рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВ: рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВ рдФрд░ рдХреМрди рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдореИрдВ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣рдордиреЗ рдЕрднреА рднреА рдЗрди рджрд┐рдирд╛рдВрдХ/рд╕рдордп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдореИрдкрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ _out of_ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рджрд┐рдирд╛рдВрдХ/рд╕рдордп рддрд░реНрдХ _into_ SQL рдХрдердиреЛрдВ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдореИрдкрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдмрджрд▓рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рджрд┐рдирд╛рдВрдХ/рд╕рдордп рддрд░реНрдХреЛрдВ рдХреЛ SQL рдХрдердиреЛрдВ рдореЗрдВ рдмрд╛рдБрдзрддреЗ рд╣реИрдВред
@qualidafial , рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЗрдбреАрдмреАрд╕реА 4.2 рд╕реНрдкреЗрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП _рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПтДв_ред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЗрдбреАрдмреАрд╕реА 4.2 рд╕реНрдкреЗрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП _рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПтДв_ред

рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ JDBC рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЕрднреА рддрдХ рдмрдЧ рдХреЗ рдмрд┐рдирд╛ рдЬреЗрдбреАрдмреАрд╕реА рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдореИрдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд░реНрдерди рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдзрд┐рдХ рдЦрд╛рд▓реА рд╕реНрд▓реЗрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдЖрдк рдПрдХ рдЬреЗрдбреАрдмреАрдЖрдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдореИрдкрд░ рдкреНрд░реАрдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреЛрд░ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╡рд┐рднрд┐рдиреНрди рдореИрдкрд░реНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдореЗрдВ рдПрдХ рд╣реА рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ - рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ / setObject, get/setX, рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг, рдЖрджрд┐ред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ (рд╕рдВрд╕реНрдХрд░рдг) рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдореИрдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдЪреЗрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдбреАрдмреА рдХреЗ рд╕рд╛рде рдЕрдВрддрд░рдВрдЧ рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ рдЬреЛ рдЬрд╕реНрдЯ рд╡рд░реНрдХ тДв рдореЗрдВ рд╕рд╛рдорд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рддрд╛ рд╣реИ):

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

рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдореИрдВ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВ ... hsqldb рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрд┐рдВрджреБ рдЬрд╣рд╛рдВ рд╡реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд╢реНрдореЗ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рдФрд░ рд╕реНрд░реЛрдд рдореЗрдВ рддрдп рдХреА рдЧрдИ, рдЕрднреА рднреА рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрдпрддрди рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рдФрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рддрд░реНрдХ рдХреЛ рд╕реНрд╡рдпрдВ рдвреВрдВрдврдХрд░ рдЙрди рдЕрдкреВрд░реНрдгрддрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ред

// I want strings handled differently
<strong i="13">@Component</strong>
public class CleanStringArgumentFactory extends AbstractArgumentFactory<String> {
    protected CleanStringArgumentFactory() {
        super(Types.VARCHAR);
    }

    <strong i="14">@Override</strong>
    protected Argument build(String value, ConfigRegistry config) {
        return (position, statement, ctx) -> statement.setString(position, StringUtils.trimToNull(value));
    }
}
// no need for jdbi's built-in logic
<strong i="17">@Component</strong>
public class SetObjectArgumentFactory implements ArgumentFactory {
    private static final Set<Type> SUPPORTED = ImmutableSet.of(UUID.class, LocalDateTime.class);

    <strong i="18">@Override</strong>
    public Optional<Argument> build(Type type, Object value, ConfigRegistry config) {
        return SUPPORTED.contains(type)
            ? Optional.of(new LoggableArgument(value, (position, statement, context) -> statement.setObject(position, value)))
            : Optional.empty();
    }
}
// these built-ins don't work and I don't need them anyway
<strong i="21">@Component</strong>
public class UnsupportedArgumentFactory implements ArgumentFactory {
    private static final Set<Type> UNSUPPORTED = ImmutableSet.of(ZonedDateTime.class, OffsetDateTime.class, OffsetTime.class);

    <strong i="22">@Override</strong>
    public Optional<Argument> build(Type type, Object value, ConfigRegistry config) {
        if (UNSUPPORTED.contains(type)) {
            throw new UnsupportedOperationException(type.getTypeName() + " is not supported at the moment");
        } else {
            return Optional.empty();
        }
    }
}
// voodoo
<strong i="25">@Inject</strong>
    public JdbiConfiguration(
        @Named("dataSource") DataSource dataSource,
        Set<ArgumentFactory> arguments,
        Set<ColumnMapper> mappers,
        Set<ColumnMapperFactory> mapperFactories
    ) {
        jdbi = Jdbi.create(dataSource);
        jdbi.clearMappings();

        jdbi.installPlugin(new SqlObjectPlugin());

        arguments.forEach(jdbi::registerArgument);
        mapperFactories.forEach(jdbi::registerColumnMapper);
        mappers.forEach(jdbi::registerColumnMapper);

        // ...

        // Jdbi instance fine-tuned for my exact database and demands, without surprises and at my own responsibility

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдореИрдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд░реНрдерди рд╣реИрдВред

рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдПрдХ рдЖрдУ, рд╕рднреА рдЖрдУ: рдпрджрд┐ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛ рдпрд╛ рдЙрд╕рдХреЗ JDBC рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП Jdbi рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ/рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╛ рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ, рд╣рдо рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЪрд╛рд╣рддреЗ рд╣реИрдВ! :)

рдмреЛрдирд╕ рдЕрдВрдХ рдпрджрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реАрдзреЗ TravisCI рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://docs.travis-ci.com/user/database-setup/

рдЖрдкрдХреЗ "рд░рд┐рдХреНрдд рд╕реНрд▓реЗрдЯ" рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рдЖрдкрддреНрддрд┐рдпрд╛рдВ рд╣реИрдВ:

  • рдореИрдВ рд╢рд╛рдпрдж clearMappings() рд╡рд┐рдзрд┐ рдХреЛ рд╕реАрдзреЗ RowMappers , ColumnMappers , Arguments , рдФрд░ JdbiCollectors рдХреЙрдиреНрдлрд┐рдЧ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп Jdbi рдкрд░ рд░рдЦреВрдВрдЧрд╛ clear() рдирд╛рдо рджреВрдВрдЧрд╛ред
  • рдореБрдЭреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдореИрдкрд░, рддрд░реНрдХ, рдФрд░ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрдХреЛрдЪ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ рдЕрдЬреАрдм рдирд╛рдо рдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рджреВрд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдВрддрд░рд┐рдХ рд╣реИрдВред рдореИрдВ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
  • рдореИрдВ рд╕рд╡рд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЦрд╛рд▓реА рд╕реНрд▓реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд░реВрд░реА рд╣реИред Jdbi рдХреА рд╕рднреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХрдХреНрд╖рд╛рдПрдВ рдЕрдВрддрд┐рдо-рдкрдВрдЬреАрдХреГрдд-рдЬреАрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рдЦрд╛рд▓реА рд╕реНрд▓реЗрдЯ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред

@jdbi/рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЛ рддреМрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

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

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

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рдореИрдкрд░реНрд╕ рдХреЛ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╣рдо рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╕реНрд▓реЗрдЯ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдореИрдкрд░реНрд╕ рдФрд░ рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЛ рдЙрдЪрд┐рдд Plugin рд╡рд┐рдЦрдВрдбреВ, PrimitivesPlugin , BoxedPrimitivesPlugin , CollectionsPlugin , рдЬреЛ рднреА рд╣реЛ, рдореЗрдВ рдмрдВрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рд░, рд╣рдо "рдмреЗрд╕" рдЬреЗрдбреАрдмреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдПрдХ рдирдпрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореМрдЬреВрджрд╛ рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ WholeJdbiEnchiladaPlugin рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдХреБрдЫ рд╣рдж рддрдХ 'рд╕реНрдкрд╖реНрдЯ' рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ - рдореБрдЭреЗ рдПрдХ рдХреЛрдб рдЧрдВрдз рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдХреБрдЫ рд╣рдж рддрдХ 'рд╕реНрдкрд╖реНрдЯ' рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ - рдореБрдЭреЗ рдПрдХ рдХреЛрдб рдЧрдВрдз рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдиреЛ-рдкреНрд░реАрдХреЙрдиреНрдлрд┐рдЧ рдЬреЗрдбреАрдмреАрдЖрдИ рдлреИрдХреНрдЯреНрд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ() рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рд╕рдордЭреМрддреЗ рдореЗрдВ рд╣реИрдВ, рдореИрдВ рд╕рд┐рд░реНрдл clear() рд╢реИрд▓реА рдкрд░ рдПрдХ рдирдИ "рдХреНрд▓реАрди" рдлреИрдХреНрдЯреНрд░реА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

рддреЛ, рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рд╕рднреА рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ? рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рд╕реЗрдХреНрд╕реА рд▓рдЧрддреА рд╣реИред

  • Jdbi рдиреЛ-рдбрд┐рдлреЙрд▓реНрдЯ рдмрдирд╛рдПрдВ (рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╣рд░ рдЪреАрдЬ рдкрд░ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ)
  • рд╕рднреА рдореМрдЬреВрджрд╛ рдореИрдкрд░ рдФрд░ рдмрд╛рдЗрдВрдбрд░ (рдФрд░ tx рд╣реИрдВрдбрд▓рд░ рдЖрджрд┐) рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп ( PrimitivesPlugin , BoxedPrimitivesPlugin , рдЖрджрд┐), рдкреНрд▓рдЧрдЗрди рдмрдВрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдПрдВ
  • рдХреБрдЫ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ ( UTCJavaTimePlugin рдмрдирд╛рдо LocalJavaTimePlugin рдмрдирд╛рдо ConvertJavaTimeToUtilDatePlugin , GetObjectMapper.forClasses(Class... cs) , SetObjectArgumentFactory.forClasses(Class... cs) , NullsToDefaultsPrimitivesPlugin рдмрдирд╛рдо NullThrowsExceptionPrimitivesPlugin ) рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ (рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ) рдмреЗрдирдХрд╛рдм рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд▓реЛрдЧ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрд▓ рд╡рд╛рдВрдЫрд┐рдд рдореИрдкрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдХреА рд░рдЪрдирд╛ рдХрд░ рд╕рдХреЗрдВ, рдХреЗрд╡рд▓ рд╡рд╣реА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрд╡реИрдз рдирд▓ рдпрд╛ рд▓рд╛рдкрддрд╛ рдЯрд╛рдЗрдордЬрд╝реЛрди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐рдпрд╛рдБ, рдФрд░ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕рдорд╛рдирддрд╛рдПрдБ
  • рд╢рд╛рдпрдж рдбреАрдмреА-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдВрдбрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдмрдирд╛рдПрдВ, рдЗрд╕рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рдбреЗрдЯрд╛рдмреЗрд╕+рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЛ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Jdbi рдФрд░ рдЙрдирдХреЗ рдбреАрдмреА рдХреЗ рд▓рд┐рдП рдПрдХ-рдкрдВрдХреНрддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдЕрдЪреНрдЫреА рдореИрдкрд┐рдВрдЧ рдпреЛрдЬрдирд╛рдПрдВ ( HsqlDb2_4_0Plugin ), рдлрд┐рд░ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде
  • рдФрд░ рдореМрдЬреВрджрд╛ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди ( BuiltInGenericPreconfigurationPlugin ) рдХреЛ рдиреЛ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рднреА рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рдмрдирд╛рддреЗ рд╣реИрдВред

Jdbi рдиреЛ-рдбрд┐рдлреЙрд▓реНрдЯ рдмрдирд╛рдПрдВ

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдореИрдкрд┐рдВрдЧ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рдирдХрд╛ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреБрдХреНрдд рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдирд╣реАрдВ, рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпрд╛рдБ рдареАрдХ рдЙрд╕реА рдкреНрд░реАрдЗрдВрд╕реНрдЯреЙрд▓реНрдб рдореИрдкрд░ рдХреЗ рд╕рд╛рде Jdbi рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреА рд░рд╣реЗрдВрдЧреА рдЬреЛ рд╡реЗ рдЕрднреА рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ DIY рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЙрдиреНрд╣реЗрдВ рдЪреБрдирддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдореИрдкрд┐рдВрдЧ рдХреА рдЕрдВрддрд░рдВрдЧрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдПрдХ рдмреАрдЪ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рднреА рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдХ DIY рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдмрд╕ YourDbAndVersionPlugin рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреЗ рд╕рд╛рде рд░реЛрд▓ рдХрд░реЗрдВред рдореЗрд░реА рд▓рдВрдмреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЬреЗрдбреАрдмреАрдЖрдИ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рдереА, рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдирд╣реАрдВред

TLDR: рдЖрдк рдЕрднреА рднреА Jdbi.create(dataSource) рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реВрдЯ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдХреЛрдИ рдФрд░ рдмрд╕ Jdbi.createBlank(dataSource).install(x).install(y).install(z)... . рдХрд╛ рдЪреБрдирд╛рд╡ рдХрд░реЗрдЧрд╛

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

рдХрд╛рдлреА рдЙрдЪрд┐рдд

@TheRealMarnes рдпрд╣ рдкреВрд░реА рдмрд╛рддрдЪреАрдд JSR-310 рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдИ рдЬреЛ рд╕реАрдзреЗ JDBC рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрд▓рдд java.time рдореИрдкрд░реНрд╕ рдФрд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдЯ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдмрд╕ java.time рд╡рд╛рд▓реЗ? рдПрдХ рдЬрд╛рд╡рд╛рдЯрд╛рдЗрдо рдкреНрд▓рдЧрдЗрди?

рд╣рд╛рдВ, рдХреЗрд╡рд▓ java.time рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХ рдФрд░ рдореИрдкрд░ рдЕрдиреБрднрд╡рд╣реАрди, рд╣рд╛рдирд┐рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ @findepi рд╡рд░реНрдгрд┐рдд рд╣реИред

SimplisticJavaTimePlugin ?

рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЬрдм рддрдХ рдореЗрд░реЗ рдЕрдиреНрдп рдкреАрдЖрд░ рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛... рдпрд╣ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИред

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

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

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

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

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

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

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