package Ġcom . on eli ang . k tx . frame . jdbc Ċ Ċ import Ġcom . on eli ang . k tx . Constants Ċ import Ġcom . on eli ang . k tx . util . common . Object Util Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* Ġsql Ġutil Ġfor Ġgenerate Ġthe Ġcommon Ġsql Ġsuch Ġas : select , insert , delete , update Ċ Ġ* Ġ@ author ĠDan del ion Ċ Ġ* Ġ@ since Ġ 2 0 0 8 - 0 9 - 2 5 Ċ Ġ*/ Ċ object ĠSql Inject Util Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġfor Ġdatabase Ġuse , make Ġthe Ġinsert Ġsql Ġstring parameter List ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ param Ġinstance ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġmapping Bean ĊĠĠĠĠ Ġ* Ġ@ param Ġsql Processor ĊĠĠĠĠ Ġ* Ġ@ return ĠPair < String , List < Any >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġobject To Insert Sql ( instance : ĠT , Ġtable : ĠString , Ġmapping Bean : ĠMapping Bean , Ġsql Processor : ĠSql Util . Sql Processor ): ĠPair < String , ĠList < Any ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġmutable ListOf < Any ?> () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġinstance . java Class . methods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= ĠObject Util . methodName To FieldName ( methodName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġmapping Bean . getColumn ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columnName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName List Ġ+= Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmethod . invoke ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue List Ġ+= ĠConstants . Symbol . QUEST ION _ MARK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Table Ġ= ĠSql Util . fix Table ( table , Ġmapping Bean , Ġsql Processor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql . append (" INSERT ĠINTO Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql . append ( fix Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql . append (" (" Ġ+ ĠcolumnName List . join ToString () Ġ+ Ġ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql . append (" ĠVALUES Ġ(" Ġ+ Ġvalue List . join ToString () Ġ+ Ġ") ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSql Inject Util Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsql . toString () Ġto Ġparameter List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġfor Ġdatabase Ġuse , make Ġthe Ġinsert Ġsql Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ param Ġk Class ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġmapping Bean ĊĠĠĠĠ Ġ* Ġ@ param Ġsql Processor ĊĠĠĠĠ Ġ* Ġ@ return ĠPair < String , ĠList < String >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġclass To Insert Sql ( k Class : ĠK Class < T >, Ġtable : ĠString , Ġmapping Bean : ĠMapping Bean , Ġsql Processor : ĠSql Util . Sql Processor ): ĠPair < String , ĠList < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval ĠfieldName List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġk Class . java . methods ĊĠĠĠĠĠĠĠ Ġval ĠcolumnName List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġvalue List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= ĠObject Util . methodName To FieldName ( methodName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġmapping Bean . getColumn ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columnName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName List Ġ+= Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue List Ġ+= ĠConstants . Symbol . QUEST ION _ MARK ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName List . add ( fieldName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfix Table Ġ= ĠSql Util . fix Table ( table , Ġmapping Bean , Ġsql Processor ) ĊĠĠĠĠĠĠĠ Ġsql . append (" INSERT ĠINTO Ġ") ĊĠĠĠĠĠĠĠ Ġsql . append ( fix Table ) ĊĠĠĠĠĠĠĠ Ġsql . append (" (" Ġ+ ĠcolumnName List . join ToString () Ġ+ Ġ") ") ĊĠĠĠĠĠĠĠ Ġsql . append (" ĠVALUES Ġ(" Ġ+ Ġvalue List . join ToString () Ġ+ Ġ") ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsql . toString () Ġto ĠfieldName List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġfor Ġdatabase Ġuse , make Ġthe Ġupdate Ġsql Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ param Ġinstance ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġother Condition ĊĠĠĠĠ Ġ* Ġ@ param Ġby Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmapping Bean ĊĠĠĠĠ Ġ* Ġ@ param Ġsql Processor ĊĠĠĠĠ Ġ* Ġ@ return ĠPair < String , ĠList < Any >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġobject ToUpdate Sql ( instance : ĠT , Ġupdate Fields : ĠArray < String > Ġ= Ġempty Array (), Ġtable : ĠString , Ġother Condition : ĠString , Ġby Id : ĠBoolean , Ġmapping Bean : ĠMapping Bean , Ġsql Processor : ĠSql Util . Sql Processor ): ĠPair < String , ĠList < Any ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid List Ġ= Ġmutable ListOf < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue List Ġ= Ġmutable ListOf < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġmutable ListOf < Any ?> () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġinstance . java Class . methods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns And Value List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate FieldSet Ġ= Ġupdate Fields . to HashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Column Ġ= Ġupdate FieldSet . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= ĠObject Util . methodName To FieldName ( methodName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġmapping Bean . getColumn ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columnName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Id Ġ= Ġmapping Bean . is Id ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! all Column Ġ&& Ġ! update FieldSet . contains ( fieldName ) Ġ&& Ġ! is Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmethod . invoke ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( by Id Ġ&& Ġis Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ" ĠAND Ġ" Ġ+ Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid List . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . append ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ" ĠAND Ġ" Ġ+ Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ" Ġis Ġ" Ġ+ ĠConstants . String . NULL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . append ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue List . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns And Value List Ġ+= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Table Ġ= ĠSql Util . fix Table ( table , Ġmapping Bean , Ġsql Processor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠSql Util . update Sql ( fix Table , Ġcolumns And Value List , Ġ"$ condition Ġ$ other Condition ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List . addAll ( value List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List . addAll ( id List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsql Ġto Ġparameter List ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSql Inject Util Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġfor Ġdatabase Ġuse , make Ġthe Ġupdate Ġsql Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ param Ġk Class ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġother Condition ĊĠĠĠĠ Ġ* Ġ@ param Ġby Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmapping Bean ĊĠĠĠĠ Ġ* Ġ@ param Ġsql Processor ĊĠĠĠĠ Ġ* Ġ@ return ĠPair < String , ĠList < String >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġclass ToUpdate Sql ( k Class : ĠK Class < T >, Ġtable : ĠString , Ġother Condition : ĠString , Ġby Id : ĠBoolean , Ġmapping Bean : ĠMapping Bean , Ġsql Processor : ĠSql Util . Sql Processor ): ĠPair < String , ĠList < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfieldName List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġid List Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġvalue List Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġk Class . java . methods ĊĠĠĠĠĠĠĠ Ġval Ġcolumns And Value List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġcondition Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= ĠObject Util . methodName To FieldName ( methodName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġmapping Bean . getColumn ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columnName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Id Ġ= Ġmapping Bean . is Id ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( by Id Ġ&& Ġis Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ" ĠAND Ġ" Ġ+ Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid List . add ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . append ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue List . add ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns And Value List Ġ+= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfix Table Ġ= ĠSql Util . fix Table ( table , Ġmapping Bean , Ġsql Processor ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠSql Util . update Sql ( fix Table , Ġcolumns And Value List , Ġ"$ condition Ġ$ other Condition ") ĊĠĠĠĠĠĠĠ ĠfieldName List . addAll ( value List ) ĊĠĠĠĠĠĠĠ ĠfieldName List . addAll ( id List ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsql Ġto ĠfieldName List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġfor Ġdatabase Ġuse Ġmake Ġthe Ġdelete Ġsql Ġstring , can Ġdelete Ġone Ġrow ĊĠĠĠĠ Ġ* Ġnot Ġthe Ġmany Ġrows ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ param Ġinstance ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġother Condition ĊĠĠĠĠ Ġ* Ġ@ param Ġby Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmapping Bean ĊĠĠĠĠ Ġ* Ġ@ param Ġsql Processor ĊĠĠĠĠ Ġ* Ġ@ return ĠPair < String , List < Any >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġobject ToDelete Sql ( instance : ĠT , Ġtable : ĠString , Ġother Condition : ĠString , Ġby Id : ĠBoolean , Ġmapping Bean : ĠMapping Bean , Ġsql Processor : ĠSql Util . Sql Processor ): ĠPair < String , ĠList < Any ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġmutable ListOf < Any ?> () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġinstance . java Class . methods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= ĠObject Util . methodName To FieldName ( methodName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġmapping Bean . getColumn ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columnName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Id Ġ= Ġmapping Bean . is Id ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( by Id Ġ&& Ġis Id ) Ġ|| Ġ(! by Id Ġ&& Ġ! is Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmethod . invoke ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . append (" ĠAND Ġ" Ġ+ Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ" =? ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{// only Ġdelete Ġnot Ġnull Ġvalue Ġwhen Ġdelete Ġnot Ġby Ġid , Ġbecause Ġnull Ġwill Ġbe Ġa Ġcondition Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( by Id Ġ&& Ġis Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . append (" ĠAND Ġ" Ġ+ Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ" Ġis Ġ" Ġ+ ĠConstants . String . NULL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Table Ġ= ĠSql Util . fix Table ( table , Ġmapping Bean , Ġsql Processor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql Ġ= ĠSql Util . delete Sql ( fix Table , Ġ"$ condition Ġ$ other Condition ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSql Inject Util Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsql Ġto Ġparameter List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġfor Ġdatabase Ġuse Ġmake Ġthe Ġdelete Ġsql Ġstring , sql Ġbinding ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ param Ġk Class ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġother Condition ĊĠĠĠĠ Ġ* Ġ@ param Ġby Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmapping Bean ĊĠĠĠĠ Ġ* Ġ@ param Ġsql Processor ĊĠĠĠĠ Ġ* Ġ@ return ĠPair < String , List < String >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġclass ToDelete Sql ( k Class : ĠK Class < T >, Ġtable : ĠString Ġ= ĠConstants . String . BLANK , Ġother Condition : ĠString Ġ= ĠConstants . String . BLANK , Ġby Id : ĠBoolean , Ġmapping Bean : ĠMapping Bean , Ġsql Processor : ĠSql Util . Sql Processor ): ĠPair < String , ĠList < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġk Class . java . methods ĊĠĠĠĠĠĠĠ Ġval ĠfieldName List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġcondition List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= ĠObject Util . methodName To FieldName ( methodName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġmapping Bean . getColumn ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columnName . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Id Ġ= Ġmapping Bean . is Id ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( by Id Ġ&& Ġis Id ) Ġ|| Ġ(! by Id Ġ&& Ġ! is Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition List Ġ+= Ġ" ĠAND Ġ" Ġ+ Ġsql Processor . keyword Symbol Left Ġ+ ĠcolumnName Ġ+ Ġsql Processor . keyword Symbol Right Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName List . add ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfix Table Ġ= ĠSql Util . fix Table ( table , Ġmapping Bean , Ġsql Processor ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠSql Util . delete Sql ( fix Table , Ġ"${ condition List . join ToString ()} Ġ$ other Condition ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsql Ġto ĠfieldName List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSql Inject Util Exception ( cause : ĠThrowable ) Ġ: ĠRuntimeException ( cause ) Ċ } Ċ