package Ġrun . smt . k test . db . query . impl Ċ Ċ import Ġrun . smt . k test . db . query . Resp on ding Query Ċ import Ġrun . smt . k test . db . query . Response Ċ import Ġorg . springframework . jdbc . core . Jdbc Template Ċ import Ġorg . springframework . jdbc . core . Row Mapper Ċ import Ġjava . sql . ResultSet Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠRepresents Ġquery Ġthat Ġreturns Ġsome Ġresult Ċ Ġ*/ Ċ abstract Ġclass ĠRes pon ding Query Impl < T Ġ: ĠAny >(_ query : ĠString ?) Ġ: ĠQuery Builder Impl (_ query ), ĠRes pon ding Query < T > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ map To : ĠK Class < T >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġextracting Ġlist Ġof Ġrequested Ġvalues Ġfrom Ġspring - jdbc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlist Loader : Ġ( Jdbc Template ) Ġ-> ĠList < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġextracting Ġresult Ġas Ġmap Ġfrom Ġspring - jdbc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap Loader : Ġ( Jdbc Template ) Ġ-> ĠMap < String , ĠAny >? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġextracting Ġsingle ĠPO JO Ġfrom Ġspring - jdbc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsingle Loader : Ġ( Jdbc Template ) Ġ-> ĠT ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġto Ġmap Ġresult Ġto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġmap To : ĠK Class < T > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ map To Ġ?: Ġthrow ĠIllegalStateException (" No Ġclass Ġpresent Ġto Ġmap Ġto ") ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ map To Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmap To ( clazz : ĠK Class < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ map To Ġ= Ġclazz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġresult Ġis Ġprimitive Ġtype ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġfor Primitive : ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap To . java Primitive Type Ġ!= Ġnull Ġ|| Ġmap To Ġ== ĠString :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġlist Loader ( loader : Ġ( Jdbc Template ) Ġ-> ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Loader Ġ= Ġloader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġmap Loader ( loader : Ġ( Jdbc Template ) Ġ-> ĠMap < String , ĠAny > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Loader Ġ= Ġloader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsingle Loader ( loader : Ġ( Jdbc Template ) Ġ-> ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsingle Loader Ġ= Ġloader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġquery ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġexecute ( jdbc : ĠJdbc Template ): ĠResponse < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap To , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Loader ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdapter Ġfor Ġspring - jdbc Ġ` Row Mapper ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġclass ĠSimple Row Mapper < T Ġ: ĠAny >( map To : ĠK Class < T >) Ġ: ĠRow Mapper < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmapper Ġ= ĠMapper ( map To ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap Row ( rs : ĠResultSet ?, Ġrow Num : ĠInt ): ĠT ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġmapper . map ( rs ?. let Ġ{ ĠSql Output Adapter ( rs ) Ġ}) ĊĠĠĠ Ġ} Ċ Ċ } Ċ