
рд╢реБрдн рджреЛрдкрд╣рд░, рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдЯреАрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдУрд░реЗрдХрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдо рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рддрдХ рдкреВрд░реА рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ: рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдкреНрд░рд╢реНрди, рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдХрд╛рд░реНрдп, рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛, рдФрд░, рд╢рд╛рдпрдж, рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рд╕рдВрдХреЗрддред рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ ORM рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рд╣рдордиреЗ Apache
DbUtils рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдФрд░ рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд╡рд░рдг рдмрдирд╛рдпрд╛ред рдиреАрдЪреЗ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдХреИрд▓рд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 2.10 рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рдФрд░ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдВрдЧреЗред
рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрдм рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (DBCP, c3po рдЖрджрд┐ рджреЗрдЦреЗрдВ)ред рдпрджрд┐ рдЖрдк рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдереЗ рдкрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рджреЗрдирд╛ рднреВрд▓ рдЬрд╛рдПрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ, рдХрднреА-рдХрднреА рд╡реЗ рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд▓рдбрд╝рд╛рдХреВ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рддреБрд░рдВрдд рдЦреБрдж рдХреЛ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдкреВрд▓ рдореЗрдВ рд░рд╣реЗрдЧрд╛, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реАрдорд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
def execute[R](operation: Connection => R): R = { val connection = driver.getConnection() try { operation(connection) } finally { connection.close() } }
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИ, рдЗрд╕рдореЗрдВ рдСрдЯреЛ рдХрдорд┐рдЯ рдФрд░ рд▓реЗрди-рджреЗрди рд░реЛрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
database.execute { connection => database.query("select ? from dual", Seq(1))(connection) }
рдпрд╛ рдмрд╕
database execute query ("select ? from dual", Seq(1))
рдпрд╣рд╛рдБ рд╕реНрдХрд╛рд▓рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд░рд╛рдХреНрд╖рд╕реА рдЕрдирд╛рдо рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рднреА рдЗрдЪреНрдЫрд╛ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИред
рдЖрдпрд╛рдд
рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмрд╣реБрдд рд╕реЗ рдЕрд▓рдЧ рдХрдмрд╛рдбрд╝ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдм рдЖрдпрд╛рдд рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИред рдЧреБрдЧрд▓реА рд╡рд╛рд▓реА рдЖрдЦрд┐рд░реА рдЪреАрдЬ рд╣реИ
рдЗрдореНрдкреЛрд░реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдмрд╣рд╕ред рд╣рд╛рд▓ рддрдХ рддрдХ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рддреАрди рдЖрдпрд╛рдд рд▓рд┐рдЦрдиреЗ рдкрдбрд╝реЗред
рд╣рдо рдПрдХ рдкреИрдХреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдХрд░ рдЖрдпрд╛рдд рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЬрд╣рд╛рдВ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдШреЛрд╖рдгрд╛рдПрдВ рдЪрд▓рддреА рдереАрдВ: рдХрд╛рд░реНрдп, рдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХред рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рд░рд╣реАрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
import ru.tcsbank.utils.database._
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ `рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдЧреНрдЬреАрдХреНрдпреВрдЯ рдХреНрд╡реЗрд░реА (" рд╕реЗрд▓реЗрдХреНрдЯ? рдбреБрдЕрд▓ ", рд╕реАрдХ (1)), рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧреА рдиреЗ рдореМрдЬреВрджрд╛ рд╕реНрдХреЛрдк рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛:
import database._
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди SQL рдХреЗ рд▓рд┐рдП
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкрд╛рд╕рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрд╢рд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рд┐рд░рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ: рдирд╡рд╛рдЧрдВрддреБрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдЫреЗрдж рдФрд░ рдПрдХ рдбреАрдмреАрдП рд╕рд┐рд░рджрд░реНрдж рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЖрджреЗрд╢ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдЬреИрд╕реЗ рд╣реА рд╕реНрдХреИрд▓рд╛ 2.10 рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдореИрдВрдиреЗ рдлреАрдЪрд░реНрд╕ рдХреА рд╕реВрдЪреА рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
рд▓рд╛рдЗрди рдкреНрд░рдХреНрд╖реЗрдк рдХреА рддрд░рд╣ рдирд╣реАрдВ рдерд╛: "рдЙрдиреНрд╣реЛрдВрдиреЗ PHP рд╕реЗ рдХреБрдЫ рдХрдЪрд░рд╛ рдЦреАрдВрдЪрд╛, рдЕрдм рдЙрд╕реА рдХреЗ рд▓рд┐рдП рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдореИрдЬрд┐рдХ` s 'рднреА рд╣реЛрдЧрд╛! "рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ред рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдореИрдВрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрд╛ рдФрд░ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдЗрдВрдЯрд░рдкреЛрд▓ рдпрд╛рдж рдЖ рдЧрдпрд╛! "рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ!" рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдордХрддреА рд╣реИ, рдореБрдЭреЗ рдПрдХ `sql` рдЗрдВрдЯрд░рдкреЛрд▓рд░ рд▓рд┐рдЦрдирд╛ рдерд╛ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ! 10 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рд╕рд╣реА рдЗрдВрдЯрд░рдкреЛрд▓рд░ рдорд┐рд▓ рдЧрдпрд╛:
http://gist.github.com/mnesarco/4515575 ред
рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕рд╣рдорддрд┐, рдмреИрдЪ рдЕрдиреБрд░реЛрдз рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рдерд╛, рдЕрдм рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдПрдХ рдирдпрд╛ рдирдЬрд╝рд░ рд╣реИ:
database execute query ( sql"select ${magic} from dual where 1=${one}" )
рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЙрдирдЯреЗрдХреНрд╕реНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ ?: -рдПрд╕) рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреНрд▓реАрдирд░ рдФрд░ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рдВрдкрд╛рджрдХ рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
database execute call ( sql"""begin pack.proc(param1 => ${value1}, param2 => ${value2}); end;""" )
рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рдпрд╣ рдерд╛ рдХрд┐ рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИрдП рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЕрдкрдиреЗ рдЖрдк рдкрддрд╛ рдЪрд▓ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдкрд╛рда рдПрд╕рдХреНрдпреВрдПрд▓ рдерд╛ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдВрдд рд╕реЗ рдкрд░реЗ рдерд╛ред
рдареАрдХ рд╣реИ, рдЕрдм рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджрд▓рд╛рд▓!
рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐
java.util.ResultSet рдмрд╣реБрдд рдирд┐рдореНрди-рд╕реНрддрд░реАрдп API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рд╕реНрддрдВрдн рдмрд╣реБрдд рд╣реА рдЕрд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рддреЗрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ResultSet рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд╛рд░ рд╣реИрдВ - рдЗрди рд╕рднреА рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рд╕реНрддрдВрдн рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдПред
рдкрд╣рд▓рд╛ рдЕрдореВрд░реНрдд, рдЬреЛ рдХрд┐ рд░рд┐рдЬрд▓реНрдЯрд╕реЗрдЯ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд▓реНрдЯреА рдореИрдкреНрд╕, рд╕реЗрдЯреНрд╕, рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд░реНрд╕рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ, рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рджреВрд╕рд░рд╛ рдЕрдореВрд░реНрдд рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рд╣реИ рдЬреЛ `ResultSet` рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд░реНрддрдорд╛рди рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдореВрд▓ рдбреЛрдореЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: Id, Time, рдФрд░ рдпрд╣ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд▓рдкреЗрдЯреЗрдВ рдЬрд╣рд╛рдВ рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
resultSet.getOptionalString("NICKNAME") resultSet.getId[User]("USER_ID") resultSet.getOptionalId[Account]("ACCOUNT_ID")
рдкреВрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрд▓ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ
database execute query ( sql"select id, nickname from user", toSetMultiMap(_.getId[User]("id"), _.getOptionalString("nickname")))
рд╕реНрд░реЛрдд рдХреЛрдб
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдо рд╡рд┐рддреНрдд рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдХрдВрдкрдиреА рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдПрдХ рдирдП рдЧреБрдг рдореЗрдВ рдЦреБрдж рдХреЛ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВред рд╕реНрд░реЛрдд рдХреЛрдб, рдЬрд┐рд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдореИрдВрдиреЗ рджрд┐рдпрд╛, рдЕрдЪреНрдЫреА рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде,
GITHub рдкрд░ MIT рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
https://github.com/TinkoffCreditSystems рднреА рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдореВрд▓ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рд╣рдо рджрд┐рд▓рдЪрд╕реНрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ: ORM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдФрд░ рд╕рд░рд▓ рд╣реЛред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 400 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрддрд░ рд░рд╣реА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬреЗрдбреАрдмреАрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдЕрднреА рднреА рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдмрди рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЧреНрдп рд▓рдХреНрд╖реНрдп рд╣реИред
рдФрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред