package Ġcom . s ama . connection . infrastructure Ċ Ċ import Ġcom . s ama . connection . domain . User Connection Ċ import Ġcom . s ama . connection . domain . User Connection Repository Ċ import Ġcom . s ama . users . domain . UserId Ċ import Ġcom . s ama . users . infrastructure . to UserId Ċ import Ġjava . lang . Long . max Ċ import Ġjava . lang . Long . min Ċ import Ġjava . sql . Types Ċ import Ġorg . springframework . jdbc . core . named param . Map Sql Parameter Source Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Operations Ċ import Ġorg . springframework . jdbc . core . named param . Sql Parameter Source Ċ import Ġorg . springframework . stereotype . Repository Ċ Ċ @ Repository Ċ class ĠJdbc User Connection Repository ( private Ġval Ġnamed Parameter Jdbc Template : ĠNamed Parameter Jdbc Operations ) Ġ: ĊĠĠĠ ĠUser Connection Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfind Connected User Ids ( userId : ĠUserId ): ĠCollection < UserId > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" user _ id ", ĠuserId . id , ĠTypes . BIG INT ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnamed Parameter Jdbc Template . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġuc . connected _ user _ id ĠFROM Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġl _ user _ id ĠAS Ġconnected _ user _ id ĠFROM Ġs ama . user _ connection ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġr _ user _ id Ġ= Ġ: user _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUNION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġr _ user _ id ĠAS Ġconnected _ user _ id Ġ ĠFROM Ġs ama . user _ connection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġl _ user _ id Ġ= Ġ: user _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġuc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . getLong (" connected _ user _ id "). to UserId () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexists ( user One Id : ĠUserId , Ġuser Two Id : ĠUserId ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġalways Ġput Ġthe Ġsmaller Ġid Ġin Ġthe Ġfirst Ġcolumn Ġto Ġensure Ġuni queness ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" l _ user _ id ", Ġmin ( user One Id . id , Ġuser Two Id . id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" r _ user _ id ", Ġmax ( user One Id . id , Ġuser Two Id . id )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnamed Parameter Jdbc Template . query For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĠEXISTS ( SELECT Ġ 1 ĠFROM Ġs ama . user _ connection ĠWHERE Ġl _ user _ id Ġ= Ġ: l _ user _ id ĠAND Ġr _ user _ id Ġ= Ġ: r _ user _ id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class . java ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( user Connection : ĠUser Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnamed Parameter Jdbc Template . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSERT ĠINTO Ġs ama . user _ connection Ġ( l _ user _ id , Ġr _ user _ id , Ġcreated _ at ) ĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVALUES Ġ(: l _ user _ id , Ġ: r _ user _ id , ĠCURRENT _ TIMESTAMP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Connection . to Sql Parameter Source () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( user Connection : ĠUser Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnamed Parameter Jdbc Template . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġs ama . user _ connection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġl _ user _ id Ġ= Ġ: l _ user _ id ĠAND Ġr _ user _ id Ġ= Ġ: r _ user _ id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Connection . to Sql Parameter Source () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠUser Connection . to Sql Parameter Source (): ĠSql Parameter Source Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġalways Ġput Ġthe Ġsmaller Ġid Ġin Ġthe Ġfirst Ġcolumn Ġto Ġensure Ġuni queness ĊĠĠĠĠĠĠĠ Ġreturn ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" l _ user _ id ", Ġmin ( left UserId . id , Ġright UserId . id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" r _ user _ id ", Ġmax ( left UserId . id , Ġright UserId . id )) ĊĠĠĠ Ġ} Ċ }