{"id":16696980,"url":"https://github.com/seratch/working-sql-in-scala","last_synced_at":"2025-04-10T02:52:14.325Z","repository":{"id":28000478,"uuid":"31494740","full_name":"seratch/working-sql-in-scala","owner":"seratch","description":"How to work with SQL queries in Scala - ScalikeJDBC, Slick StaticQuery and Anorm.","archived":false,"fork":false,"pushed_at":"2015-03-01T13:53:18.000Z","size":140,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T04:22:17.676Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://blog.seratch.net/post/112407302678/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seratch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-01T11:34:19.000Z","updated_at":"2019-08-18T16:39:57.000Z","dependencies_parsed_at":"2022-07-08T10:51:51.453Z","dependency_job_id":null,"html_url":"https://github.com/seratch/working-sql-in-scala","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Fworking-sql-in-scala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Fworking-sql-in-scala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Fworking-sql-in-scala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Fworking-sql-in-scala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seratch","download_url":"https://codeload.github.com/seratch/working-sql-in-scala/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248147072,"owners_count":21055474,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T17:45:37.244Z","updated_at":"2025-04-10T02:52:14.302Z","avatar_url":"https://github.com/seratch.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Working with Plain SQL in Scala\n\nThis is a simple example to show how to work with SQL queries in Scala. ScalikeJDBC, Slick StaticQuery and Anorm.\n\n- [ScalikeJDBC 2.2.4](http://scalikejdbc.org/documentation/sql-interpolation.html)\n- [Slick 2.1.0](http://slick.typesafe.com/doc/2.1.0/sql.html)\n- [Anorm 2.3.8](https://www.playframework.com/documentation/2.3.8/ScalaAnorm)\n\n## Blog Article\n\nWhy is ScalikeJDBC efficient when working with plain SQL?\n\nhttp://blog.seratch.net/post/112407302678/\n\n## How to run\n\nJust `sbt run` will run [examples](https://github.com/seratch/working-sql-in-scala/blob/master/src/main/scala/example/examples.scala).\n\n```\n$ sbt run\n\n----- ScalikeJDBC -----\nstatement:\nselect\n  p.id as i_on_p, p.name as n_on_p, p.birth_date as bd_on_p,\n  cmp.id as i_on_cmp, cmp.name as n_on_cmp, cmp.country_id as ci_on_cmp,\n  cnt.id as i_on_cnt, cnt.name as n_on_cnt,\n  pe.person_id as pi_on_pe, pe.attr1 as a1_on_pe, pe.attr2 as a2_on_pe, pe.attr3 as a3_on_pe, pe.attr4 as a4_on_pe, pe.attr5 as a5_on_pe, pe.attr6 as a6_on_pe, pe.attr7 as a7_on_pe, pe.attr8 as a8_on_pe, pe.attr9 as a9_on_pe, pe.attr10 as a10_on_pe\nfrom\n  person p\n  left join employee e  on e.person_id = p.id\n  left join company cmp on cmp.id = e.company_id\n  left join country cnt on cnt.id = cmp.country_id\n  left join personal_attributes pe on pe.person_id = p.id\nwhere\n  p.id = ?\n\nparameters:List(123)\n\n20:35:38.945 [run-main-0] DEBUG s.StatementExecutor$$anon$1 - SQL execution completed\n\n  [SQL Execution]\n   select p.id as i_on_p, p.name as n_on_p, p.birth_date as bd_on_p, cmp.id as i_on_cmp, cmp.name as n_on_cmp, cmp.country_id as ci_on_cmp, cnt.id as i_on_cnt, cnt.name as n_on_cnt, pe.person_id as pi_on_pe, pe.attr1 as a1_on_pe, pe.attr2 as a2_on_pe, pe.attr3 as a3_on_pe, pe.attr4 as a4_on_pe, pe.attr5 as a5_on_pe, pe.attr6 as a6_on_pe, pe.attr7 as a7_on_pe, pe.attr8 as a8_on_pe, pe.attr9 as a9_on_pe, pe.attr10 as a10_on_pe from person p left join employee e on e.person_id = p.id left join company cmp on cmp.id = e.company_id left join country cnt on cnt.id = cmp.country_id left join personal_attributes pe on pe.person_id = p.id where p.id = 123; (1 ms)\n\n  [Stack Trace]\n    ...\n    example.ScalikeJDBCExample$$anonfun$2.apply(examples.scala:80)\n    example.ScalikeJDBCExample$$anonfun$2.apply(examples.scala:79)\n    scalikejdbc.DBConnection$class.readOnly(DBConnection.scala:206)\n    scalikejdbc.DB.readOnly(DB.scala:75)\n    scalikejdbc.DB$$anonfun$readOnly$1.apply(DB.scala:188)\n    scalikejdbc.DB$$anonfun$readOnly$1.apply(DB.scala:187)\n    scalikejdbc.LoanPattern$class.using(LoanPattern.scala:33)\n    scalikejdbc.DB$.using(DB.scala:153)\n    scalikejdbc.DB$.readOnly(DB.scala:187)\n    example.ScalikeJDBCExample$class.runScalikeJDBCExample(examples.scala:79)\n    example.Main$.runScalikeJDBCExample(main.scala:3)\n    example.Main$.delayedEndpoint$example$Main$1(main.scala:11)\n    example.Main$delayedInit$body.apply(main.scala:4)\n    scala.Function0$class.apply$mcV$sp(Function0.scala:40)\n    scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)\n    ...\n\nList(Map(I_ON_CNT -\u003e 1, A2_ON_PE -\u003e Nagoya, A1_ON_PE -\u003e GitHub user, PI_ON_PE -\u003e 123, I_ON_P -\u003e 123, I_ON_CMP -\u003e 2, N_ON_CNT -\u003e Japan, N_ON_P -\u003e Taro Yamada, BD_ON_P -\u003e 1980-01-02, N_ON_CMP -\u003e Toyota, CI_ON_CMP -\u003e 1))\n\n\n----- Slick -----\nSQLInterpolationResult(WrappedArray(\nselect\n  p.id as person_id,\n  p.name as person_name,\n  p.birth_date as person_birth_date,\n  cmp.id as company_id,\n  cmp.name as company_name,\n  cnt.id as country_id,\n  cnt.name as country_name,\n  #,\nfrom\n  person p\n  left join employee e  on e.person_id = p.id\n  left join company cmp on cmp.id = e.company_id\n  left join country cnt on cnt.id = cmp.country_id\n  left join personal_attributes pe on pe.person_id = p.id\nwhere\n  p.id = ,\n  ),(pe.attr1 as personal_attr1,pe.attr2 as personal_attr2,pe.attr3 as personal_attr3,pe.attr4 as personal_attr4,pe.attr5 as personal_attr5,pe.attr6 as personal_attr6,pe.attr7 as personal_attr7,pe.attr8 as personal_attr8,pe.attr9 as personal_attr9,pe.attr10 as personal_attr10,123),SetTupleParameter\u003c2\u003e)\n\n20:35:39.167 [run-main-0] DEBUG s.slick.jdbc.JdbcBackend.statement - Preparing statement:\nselect\n  p.id as person_id,\n  p.name as person_name,\n  p.birth_date as person_birth_date,\n  cmp.id as company_id,\n  cmp.name as company_name,\n  cnt.id as country_id,\n  cnt.name as country_name,\n  pe.attr1 as personal_attr1,pe.attr2 as personal_attr2,pe.attr3 as personal_attr3,pe.attr4 as personal_attr4,pe.attr5 as personal_attr5,pe.attr6 as personal_attr6,pe.attr7 as personal_attr7,pe.attr8 as personal_attr8,pe.attr9 as personal_attr9,pe.attr10 as personal_attr10\nfrom\n  person p\n  left join employee e  on e.person_id = p.id\n  left join company cmp on cmp.id = e.company_id\n  left join country cnt on cnt.id = cmp.country_id\n  left join personal_attributes pe on pe.person_id = p.id\nwhere\n  p.id = ?\n\n20:35:39.176 [run-main-0] DEBUG s.slick.jdbc.JdbcBackend.benchmark - Execution of prepared statement took 1ms\n20:35:39.196 [run-main-0] DEBUG s.slick.jdbc.StatementInvoker.result - /-----------+-------------+-------------------+------------+--------------+------------+--------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+-----------------\\\n20:35:39.196 [run-main-0] DEBUG s.slick.jdbc.StatementInvoker.result - | PERSON_ID | PERSON_NAME | PERSON_BIRTH_DATE | COMPANY_ID | COMPANY_NAME | COUNTRY_ID | COUNTRY_NAME | PERSONAL_ATTR1 | PERSONAL_ATTR2 | PERSONAL_ATTR3 | PERSONAL_ATTR4 | PERSONAL_ATTR5 | PERSONAL_ATTR6 | PERSONAL_ATTR7 | PERSONAL_ATTR8 | PERSONAL_ATTR9 | PERSONAL_ATTR10 |\n20:35:39.196 [run-main-0] DEBUG s.slick.jdbc.StatementInvoker.result - +-----------+-------------+-------------------+------------+--------------+------------+--------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+-----------------+\n20:35:39.197 [run-main-0] DEBUG s.slick.jdbc.StatementInvoker.result - | 123       | Taro Yamada | 1980-01-02        | 2          | Toyota       | 1          | Japan        | GitHub user    | Nagoya         | NULL           | NULL           | NULL           | NULL           | NULL           | NULL           | NULL           | NULL            |\n20:35:39.197 [run-main-0] DEBUG s.slick.jdbc.StatementInvoker.result - \\-----------+-------------+-------------------+------------+--------------+------------+--------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+-----------------/\nList(Map(PERSONAL_ATTR7 -\u003e null, PERSON_BIRTH_DATE -\u003e 1980-01-02, PERSONAL_ATTR2 -\u003e Nagoya, COMPANY_NAME -\u003e Toyota, COUNTRY_ID -\u003e 1, PERSONAL_ATTR3 -\u003e null, PERSONAL_ATTR10 -\u003e null, PERSONAL_ATTR6 -\u003e null, PERSONAL_ATTR1 -\u003e GitHub user, PERSONAL_ATTR5 -\u003e null, PERSONAL_ATTR8 -\u003e null, COUNTRY_NAME -\u003e Japan, PERSONAL_ATTR9 -\u003e null, PERSONAL_ATTR4 -\u003e null, PERSON_ID -\u003e 123, PERSON_NAME -\u003e Taro Yamada, COMPANY_ID -\u003e 2))\n\n\n----- Anorm -----\nSimpleSql(SqlQuery(\nselect\n  p.id as person_id,\n  p.name as person_name,\n  p.birth_date as person_birth_date,\n  cmp.id as company_id,\n  cmp.name as company_name,\n  cnt.id as country_id,\n  cnt.name as country_name,\n  pe.attr1 as personal_attr1,\n  pe.attr2 as personal_attr2,\n  pe.attr3 as personal_attr3,\n  pe.attr4 as personal_attr4,\n  pe.attr5 as personal_attr5,\n  pe.attr6 as personal_attr6,\n  pe.attr7 as personal_attr7,\n  pe.attr8 as personal_attr8,\n  pe.attr9 as personal_attr9,\n  pe.attr10 as personal_attr10\nfrom\n  person p\n  left join employee e  on e.person_id = p.id\n  left join company cmp on cmp.id = e.company_id\n  left join country cnt on cnt.id = cmp.country_id\n  left join personal_attributes pe on pe.person_id = p.id\nwhere\n  p.id = %s\n  ,List(_0),None),Map(_0 -\u003e ParameterValue(123)),\u003cfunction1\u003e)\n\nStream(Row('ColumnName(.PERSON_ID,Some(PERSON_ID))': 123 as java.lang.Integer, 'ColumnName(.PERSON_NAME,Some(PERSON_NAME))': Taro Yamada as java.lang.String, 'ColumnName(.PERSON_BIRTH_DATE,Some(PERSON_BIRTH_DATE))': 1980-01-02 as java.sql.Date, 'ColumnName(.COMPANY_ID,Some(COMPANY_ID))': 2 as java.lang.Integer, 'ColumnName(.COMPANY_NAME,Some(COMPANY_NAME))': Toyota as java.lang.String, 'ColumnName(.COUNTRY_ID,Some(COUNTRY_ID))': 1 as java.lang.Integer, 'ColumnName(.COUNTRY_NAME,Some(COUNTRY_NAME))': Japan as java.lang.String, 'ColumnName(.PERSONAL_ATTR1,Some(PERSONAL_ATTR1))': GitHub user as java.lang.String, 'ColumnName(.PERSONAL_ATTR2,Some(PERSONAL_ATTR2))': Nagoya as java.lang.String, 'ColumnName(.PERSONAL_ATTR3,Some(PERSONAL_ATTR3))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR4,Some(PERSONAL_ATTR4))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR5,Some(PERSONAL_ATTR5))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR6,Some(PERSONAL_ATTR6))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR7,Some(PERSONAL_ATTR7))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR8,Some(PERSONAL_ATTR8))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR9,Some(PERSONAL_ATTR9))': null as java.lang.String, 'ColumnName(.PERSONAL_ATTR10,Some(PERSONAL_ATTR10))': null as java.lang.String), ?)\n\n[success] Total time: 10 s, completed Mar 1, 2015 8:35:39 PM\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseratch%2Fworking-sql-in-scala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseratch%2Fworking-sql-in-scala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseratch%2Fworking-sql-in-scala/lists"}