package Ġse . pl il ja . spring da ogen . copy able Ċ Ċ import Ġse . pl il ja . spring da ogen . config . Config ĊĊ Ċ fun Ġquery able (_ package : ĠString , Ġconfig : ĠConfig ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠ Ġreturn ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Queryable ", Ġ""" Ċ package Ġ$_ package ; Ċ Ċ import Ġorg . springframework . jdbc . core . Row Mapper ; Ċ import Ġorg . springframework . jdbc . core . named param . Map Sql Parameter Source ; Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Template ; Ċ Ċ import Ġjava . util . Collections ; Ċ import Ġjava . util . HashMap ; Ċ import Ġjava . util . List ; Ċ import Ġjava . util . NoSuch ElementException ; Ċ import Ġjava . util . Optional ; Ċ import Ġjava . util . function . Supplier ; Ċ import Ġjava . util . stream . Collectors ; Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġprovides Ġquery Ġaccess Ġto Ġa Ġtable Ġor Ġview Ċ Ġ* Ġin Ġthe Ġdatabase . Ċ Ġ*/ Ċ public Ġabstract Ġclass ĠQuery able < T > Ġ{ ĊĊĠĠĠ Ġprivate Ġfinal ĠClass < T > Ġentity Class ; ĊĠĠĠ Ġprivate Ġfinal ĠNamed Parameter Jdbc Template Ġjdbc Template ; ĊĊĠĠĠ Ġprotected ĠQuery able ( Class < T > Ġentity Class , ĠNamed Parameter Jdbc Template Ġjdbc Template ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . entity Class Ġ= Ġentity Class ; ĊĠĠĠĠĠĠĠ Ġthis . jdbc Template Ġ= Ġjdbc Template ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġlong Ġcount () Ġ{ ĊĠĠĠĠĠĠĠ ĠString Ġsql Ġ= Ġget Count Sql (); ĊĠĠĠĠĠĠĠ ĠHashMap < String , ĠObject > Ġno Params Ġ= Ġnew ĠHashMap <>(); ĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc Template . query For Object ( sql , Ġno Params , ĠLong . class ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġall Ġrows . ĠNote Ġthat Ġthis Ġwill Ġthrow Ġa ĊĠĠĠĠ Ġ* Ġ{@ link ĠToo Many Rows Available Exception } Ġif Ġthe Ġtable / view ĊĠĠĠĠ Ġ* Ġis Ġlarger Ġthan Ġexpected . ĠIf Ġyou Ġexpect Ġmany Ġrows Ġto Ġbe ĊĠĠĠĠ Ġ* Ġreturned , Ġyou Ġshould Ġeither Ġuse Ġone Ġof Ġthe Ġfind Page - methods ĊĠĠĠĠ Ġ* Ġor Ġif Ġyou Ġknow Ġthat Ġthe Ġtable Ġwill Ġfit Ġin Ġmemory ĊĠĠĠĠ Ġ* Ġyou Ġcan Ġalso Ġuse Ġ{@ link Ġ# findAll ( int )} Ġor Ġre configure ĊĠĠĠĠ Ġ* Ġthe Ġlimit Ġfor Ġwhen Ġto Ġthrow Ġthe Ġexception . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠList < T > ĠfindAll () Ġthrows ĠToo Many Rows Available Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll ( get Select All Default Max Count ()); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSame Ġas Ġ{@ link Ġ# findAll ()} Ġbut Ġwith Ġa Ġparameter Ġindicating ĊĠĠĠĠ Ġ* Ġwhat Ġis Ġconsidered Ġtoo Ġmany Ġrows . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠList < T > ĠfindAll ( int Ġmax Allowed Count ) Ġthrows ĠToo Many Rows Available Exception Ġ{ ĊĠĠĠĠĠĠĠ ĠList < T > Ġresult Ġ= Ġjdbc Template . query ( get Select Many Sql ( max Allowed Count Ġ+ Ġ 1 ), ĠCollections . empty Map (), Ġget Row Mapper ()); ĊĠĠĠĠĠĠĠ Ġensure Max Count Not Exceeded ( max Allowed Count , Ġresult ); ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġone Ġelement Ġusing Ġa Ġquery . ĠF ails ĊĠĠĠĠ Ġ* Ġif Ġmore Ġthan Ġone Ġelement Ġis Ġfound . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġmore Ġthan Ġone Ġelement Ġwas Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠOptional < T > Ġfind One ( Query Item < T > Ġquery Item ) Ġthrows ĠIllegalArgumentException Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind One ( Collections . singletonList ( query Item )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġone Ġelement Ġusing Ġa Ġquery . ĠF ails ĊĠĠĠĠ Ġ* Ġif Ġmore Ġthan Ġone Ġelement Ġis Ġfound . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġmore Ġthan Ġone Ġelement Ġwas Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠOptional < T > Ġfind One ( List < Query Item < T >> Ġquery Items ) Ġthrows ĠIllegalArgumentException Ġ{ ĊĠĠĠĠĠĠĠ ĠList < T > Ġresults Ġ= ĠfindAll ( query Items ); ĊĠĠĠĠĠĠĠ Ġif Ġ( results . size () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġnew ĠIllegalArgumentException (" More Ġthan Ġone Ġrow Ġavailable , Ġexpected Ġexactly Ġone "); ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( results . size () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOptional . empty (); ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOptional . of ( results . get ( 0 )); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġexactly Ġone Ġelement Ġusing Ġa ĠfindAll OrderBy . ĠF ails ĊĠĠĠĠ Ġ* Ġif Ġzero Ġelements Ġor Ġmore Ġthan Ġone Ġelement Ġis Ġfound . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġmore Ġthan Ġone Ġelement Ġwas Ġfound ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch ElementException ĠĠ Ġif Ġno Ġelement Ġwas Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠT Ġget One ( Query Item < T > Ġquery Item ) Ġthrows ĠIllegalArgumentException , ĠNoSuch ElementException Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget One ( Collections . singletonList ( query Item )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġexactly Ġone Ġelement Ġusing Ġa Ġquery . ĠF ails ĊĠĠĠĠ Ġ* Ġif Ġzero Ġelements Ġor Ġmore Ġthan Ġone Ġelement Ġis Ġfound . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġmore Ġthan Ġone Ġelement Ġwas Ġfound ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch ElementException ĠĠ Ġif Ġno Ġelement Ġwas Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠT Ġget One ( List < Query Item < T >> Ġquery Items ) Ġthrows ĠIllegalArgumentException , ĠNoSuch ElementException Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind One ( query Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw (() Ġ-> Ġnew ĠNoSuch ElementException (" No Ġmatching Ġrow Ġwas Ġfound ")); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll OrderBy ( SortOrder < T > ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll OrderBy ( Collections . emptyList (), ĠCollections . singletonList ( orderBy )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll OrderBy ( List < SortOrder < T >> ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll OrderBy ( Collections . emptyList (), ĠorderBy ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll ( Query Item < T > Ġquery Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll ( Collections . singletonList ( query Item )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll ( List < Query Item < T >> Ġquery Items ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll OrderBy ( query Items , ĠCollections . emptyList ()); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll OrderBy ( Query Item < T > Ġquery Item , ĠSort Order < T > ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll OrderBy ( Collections . singletonList ( query Item ), ĠCollections . singletonList ( orderBy )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll OrderBy ( List < Query Item < T >> Ġquery Items , ĠSort Order < T > ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll OrderBy ( query Items , ĠCollections . singletonList ( orderBy )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > ĠfindAll OrderBy ( List < Query Item < T >> Ġquery Items , ĠList < SortOrder < T >> ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMap Sql Parameter Source Ġparams Ġ= Ġnew ĠMap Sql Parameter Source (); ĊĠĠĠĠĠĠĠ ĠStringBuilder Ġwhere Clause Ġ= Ġget Where Clause ( query Items , Ġparams ); ĊĠĠĠĠĠĠĠ ĠStringBuilder ĠorderBy Clause Ġ= Ġget OrderBy Clause ( orderBy ); ĊĠĠĠĠĠĠĠ ĠString Ġsql Ġ= Ġget Query OrderBy Sql ( get Select All Default Max Count () Ġ+ Ġ 1 , Ġwhere Clause . toString (), ĠorderBy Clause . toString ()); ĊĠĠĠĠĠĠĠ ĠList < T > Ġresult Ġ= Ġjdbc Template . query ( sql , Ġparams , Ġget Row Mapper ()); ĊĠĠĠĠĠĠĠ Ġensure Max Count Not Exceeded ( get Select All Default Max Count (), Ġresult ); ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > Ġfind Page OrderBy ( long Ġstart , Ġint ĠpageSize , ĠSort Order < T > ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Page OrderBy ( start , ĠpageSize , ĠCollections . emptyList (), ĠCollections . singletonList ( orderBy )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > Ġfind Page OrderBy ( long Ġstart , Ġint ĠpageSize , ĠList < SortOrder < T >> ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Page OrderBy ( start , ĠpageSize , ĠCollections . emptyList (), ĠorderBy ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > Ġfind Page OrderBy ( long Ġstart , Ġint ĠpageSize , ĠQuery Item < T > Ġquery Item , ĠSort Order < T > ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Page OrderBy ( start , ĠpageSize , ĠCollections . singletonList ( query Item ), ĠCollections . singletonList ( orderBy )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > Ġfind Page OrderBy ( long Ġstart , Ġint ĠpageSize , ĠList < Query Item < T >> Ġquery Items , ĠSort Order < T > ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Page OrderBy ( start , ĠpageSize , Ġquery Items , ĠCollections . singletonList ( orderBy )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic ĠList < T > Ġfind Page OrderBy ( long Ġstart , Ġint ĠpageSize , ĠList < Query Item < T >> Ġquery Items , ĠList < SortOrder < T >> ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pageSize Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCollections . emptyList (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( orderBy . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġnew ĠIllegalArgumentException (" Must Ġsupply Ġorder Ġby Ġwhen Ġquerying Ġfor Ġa Ġpage "); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMap Sql Parameter Source Ġparams Ġ= Ġnew ĠMap Sql Parameter Source (); ĊĠĠĠĠĠĠĠ ĠStringBuilder Ġwhere Clause Ġ= Ġget Where Clause ( query Items , Ġparams ); ĊĠĠĠĠĠĠĠ ĠStringBuilder ĠorderBy Clause Ġ= Ġget OrderBy Clause ( orderBy ); ĊĠĠĠĠĠĠĠ ĠString Ġsql Ġ= Ġget Query Page OrderBy Sql ( start , ĠpageSize , Ġwhere Clause . toString (), ĠorderBy Clause . toString ()); ĊĠĠĠĠĠĠĠ ĠList < T > Ġresult Ġ= Ġjdbc Template . query ( sql , Ġparams , Ġget Row Mapper ()); ĊĠĠĠĠĠĠĠ Ġensure Max Count Not Exceeded ( pageSize , Ġresult ); ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĠStringBuilder Ġget OrderBy Clause ( List < SortOrder < T >> ĠorderBy ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStringBuilder ĠorderBy Clause Ġ= Ġnew ĠStringBuilder (); ĊĠĠĠĠĠĠĠ Ġif Ġ(! orderBy . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Clause . append (" ORDER ĠBY Ġ"); ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList < String > Ġcolumn Names Ġ= ĠorderBy . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( s Ġ-> Ġs . getColumn (). get Esc aped ColumnName () Ġ+ Ġ" Ġ" Ġ+ Ġs . getOrder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()); ĊĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Clause . append ( String . join (", Ġ", Ġcolumn Names )); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠorderBy Clause ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĠStringBuilder Ġget Where Clause ( List < Query Item < T >> Ġquery Items , ĠMap Sql Parameter Source Ġparams ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStringBuilder Ġwhere Clause Ġ= Ġnew ĠStringBuilder (" Ġ"); ĊĠĠĠĠĠĠĠ ĠParam Generator Ġparam Generator Ġ= Ġnew ĠParam Generator (); ĊĠĠĠĠĠĠĠ Ġfor Ġ( Query Item < T > Ġquery Item Ġ: Ġquery Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause . append (" ĠAND Ġ"); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause . append ( query Item . get Clause ( params , Ġparam Generator )); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhere Clause . append (" Ġ"); ĊĠĠĠĠĠĠĠ Ġreturn Ġwhere Clause ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvoid Ġensure Max Count Not Exceeded ( int Ġmax Allowed Count , ĠList < T > Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġqueries Ġhave Ġbeen Ġcorrectly Ġgenerated Ġit Ġshould Ġnever Ġbe Ġpossible Ġto Ġselect ĊĠĠĠĠĠĠĠ Ġ// Ġmore Ġthan Ġmax Allowed Count Ġ+ Ġ 1 Ġeven Ġif Ġthe Ġtable Ġis Ġlarger Ġthan Ġthat ĊĠĠĠĠĠĠĠ Ġassert Ġresult . size () Ġ<= Ġmax Allowed Count Ġ+ Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġif Ġ( result . size () Ġ> Ġmax Allowed Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġnew ĠToo Many Rows Available Exception ( String . format (" Max Ġallowed Ġcount Ġof Ġ% d Ġrows Ġexceeded ", Ġmax Allowed Count )); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġa Ġcolumn Ġby Ġit 's Ġdatabase Ġname . ĊĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġno Ġmatching Ġcolumn Ġwas Ġfound . ĊĠĠĠĠ Ġ* Ġ< p /> ĊĠĠĠĠ Ġ* ĠComparison Ġis Ġcase Ġsensitive . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠColumn < T , Ġ?> Ġget Column ByName ( String Ġname ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( Column < T , Ġ?> Ġcolumn Ġ: Ġget Columns List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column . get ColumnName (). equals ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġa Ġcolumn Ġby Ġit 's Ġdatabase Ġname . ĊĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġno Ġmatching Ġcolumn Ġwas Ġfound . ĊĠĠĠĠ Ġ* Ġ< p /> ĊĠĠĠĠ Ġ* ĠComparison Ġis Ġcase Ġins ensitive . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠColumn < T , Ġ?> Ġget Column ByName IgnoreCase ( String Ġname ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( Column < T , Ġ?> Ġcolumn Ġ: Ġget Columns List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column . get ColumnName (). equalsIgnoreCase ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġa Ġcolumn Ġby Ġit 's Ġname Ġin Ġthe ĠJava Ġcode . ĊĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġno Ġmatching Ġcolumn Ġwas Ġfound . ĊĠĠĠĠ Ġ* Ġ< p /> ĊĠĠĠĠ Ġ* ĠComparison Ġis Ġcase Ġsensitive . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠColumn < T , Ġ?> Ġget Column By FieldName ( String Ġname ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( Column < T , Ġ?> Ġcolumn Ġ: Ġget Columns List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column . getField Name (). equals ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġa Ġcolumn Ġby Ġit 's Ġname Ġin Ġthe ĠJava Ġcode . ĊĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġno Ġmatching Ġcolumn Ġwas Ġfound . ĊĠĠĠĠ Ġ* Ġ< p /> ĊĠĠĠĠ Ġ* ĠComparison Ġis Ġcase Ġins ensitive . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic ĠColumn < T , Ġ?> Ġget Column By FieldName IgnoreCase ( String Ġname ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( Column < T , Ġ?> Ġcolumn Ġ: Ġget Columns List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column . getField Name (). equalsIgnoreCase ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract ĠList < Column < T , Ġ?>> Ġget Columns List (); ĊĊĠĠĠ Ġpublic ĠClass < T > Ġget Entity Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentity Class ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract ĠRow Mapper < T > Ġget Row Mapper (); ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMax Ġallowed Ġcount Ġwhen Ġselecting Ġall Ġobjects . ĠProt ect s Ġagainst ĊĠĠĠĠ Ġ* Ġunexpected ly Ġlarge Ġqueries Ġthat Ġmay Ġcause Ġperformance Ġde grad ation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġint Ġget Select All Default Max Count (); ĊĊĠĠĠ Ġprotected Ġabstract ĠString Ġget Count Sql (); ĊĊĠĠĠ Ġprotected Ġabstract ĠString Ġget Select Many Sql ( int Ġmax Allowed Count ); ĊĊĠĠĠ Ġprotected Ġabstract ĠString Ġget Query Page OrderBy Sql ( long Ġstart , Ġint ĠpageSize , ĠString Ġwhere Clause , ĠString ĠorderBy ); ĊĊĠĠĠ Ġprotected Ġabstract ĠString Ġget Query OrderBy Sql ( int Ġmax Allowed Count , ĠString Ġwhere Clause , ĠString ĠorderBy ); ĊĊĠĠĠ Ġprivate Ġstatic Ġclass ĠParam Generator Ġimplements ĠSupplier < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġint Ġcounter Ġ= Ġ 0 ; ĊĊĠĠĠĠĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠ Ġpublic ĠString Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format (" q % d ", Ġcounter ++); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ """. trim Indent ()) Ċ } Ċ