package Ġru . an ik in . r zd . repository čĊč Ċ import Ġcom . zaxxer . hikari . HikariConfig č Ċ import Ġcom . zaxxer . hikari . Hikari DataSource č Ċ import Ġcom . zaxxer . hikari . metrics . Metrics Tracker Factory č Ċ import Ġorg . springframework . beans . factory . annotation . Autowired č Ċ import Ġorg . springframework . core . env . Environment č Ċ import Ġjava . sql .* č Ċ import Ġjavax . annotation . Post Construct čĊč Ċ abstract Ġclass ĠBase Repository Ġ{ čĊĠĠĠ Ġprivate Ġvar Ġurl : ĠString ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġuser : ĠString ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġpassword : ĠString ? Ġ= Ġnull čĊčĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġpool : ĠH ikari DataSource čĊčĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġconn : ĠConnection čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġenv : ĠEnvironment čĊčĊĠĠĠ Ġ@ Post Construct čĊĠĠĠ Ġ@ Throws ( SQLException :: class ) čĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġjava Class . getAnnotation ( Config Prefix :: class . java ). value čĊĠĠĠĠĠĠĠ Ġurl Ġ= Ġenv . getProperty ("$ prefix . url ") čĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġenv . getProperty ("$ prefix . user ") čĊĠĠĠĠĠĠĠ Ġpassword Ġ= Ġenv . getProperty ("$ prefix . password ") čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Throws ( SQLException :: class ) čĊĠĠĠ Ġprotected Ġfun Ġexec ( query : ĠString ?): ĠResultSet Ġ{ čĊĠĠĠĠĠĠĠ Ġconn Ġ= ĠDriver Manager . getConnection ( url , Ġuser , Ġpassword ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġconn . prepareStatement ( query ). executeQuery () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Throws ( SQLException :: class ) čĊĠĠĠ Ġprotected Ġfun Ġexec Call ( query : ĠString ?): ĠResultSet Ġ{ čĊĠĠĠĠĠĠĠ Ġconn Ġ= ĠDriver Manager . getConnection ( url , Ġuser , Ġpassword ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġconn . prepare Call ( query ). executeQuery () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Throws ( SQLException :: class ) čĊĠĠĠ Ġprotected Ġfun Ġexec Update ( query : ĠString ?): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġconn Ġ= ĠDriver Manager . getConnection ( url , Ġuser , Ġpassword ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġconn . createStatement (). executeUpdate ( query ) čĊĠĠĠ Ġ} čĊč Ċ } čĊ