Your SlideShare is downloading. ×
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech

1,312
views

Published on

- ScalikeJDBC & ScalikeJDBC Async introduction …

- ScalikeJDBC & ScalikeJDBC Async introduction
- Skinny Framework introduction

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,312
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. JDBC-like non-blocking DB Access in Scala @seratch Kazuhiro Sera Kabukiza.tech is a workshop which is presented by Dwango at Kabukiza tower
  • 2. ScalikeJDBC  - DB Access library in Scala - “Never stuck when using at work“ - SQL, flexibility, expandability, speedy bug fixes and releases - Cool enough though it’s less well- known than Slick or Squeryl.
  • 3. DSL Example import scalikejdbc._, SQLInterpolation._ val memberId = 123 val member = DB readOnly { implicit session => withSQL { select.from(Member as m) .where.eq(m.id, memberId).and.isNull(m.deletedAt) }.map(Member(m)).single.apply() }
  • 4. SQL Interpolation import scalikejdbc._, SQLInterpolation._ val memberId = 123 val member = DB readOnly { implicit session => sql”””select id, name from member where id = ${memberId} and deleted_at is null””” .map(Member(m)).single.apply() }
  • 5. Get things done - Easy to understand, few pitfalls - No need to google framework specific knowledges - Easy to find the first developer who use it correctly (required background is only Scala basics and SQL)
  • 6. Productive - Mostly type-safe DSL - Source code generator from existing tables via sbt plugin - Logging slow queries, it’s also possible to send data to external services (e.g. Fluentd) - AutoRollback testing support for specs2、ScalaTest
  • 7. ScalikeJDBC-Async - ScalikeJDBC compatible API, but it doesn’t use JDBC internally - Inspired by Activate ‘s async API support (2013/7) - Though some introduction examples are already reported, this library is still in the alpha stage.
  • 8. How? - Just wrapped postgresql-async/ mysql-async by @mauricio - Netty based database driver which is not compatible with JDBC - ConnectionPool with queue - Transaction = begin/commit in a non-shared connection
  • 9. Mostly same! import scalikejdbc._, SQLInterpolation._, async._ val memberId = 123 val member = AsyncDB withPool { implicit session => withSQL { select.from(Member as m) .where.eq(m.id, memberId).and.isNull(m.deletedAt) }.map(Member(m)).single.future() }
  • 10. Transactions with for comprehensions val name = “Typesafe” val programmers = Seq(“Alice”, “Bob”, “Chris”) val resultFuture = AsyncDB localTx { implicit tx => for { company <- Company.create(name) employees <- company.hireAll(programmers) } yield () }
  • 11. Tips - Since you need to work with many Future[Option[_]] and Future[List[_]], for comprehensions are suitable - Play2’s Action can receive Future values, pretty good chemistry
  • 12. One more thing This is a Lightning talk, but I have “One more thing”.
  • 13. Really Must? Indeed, some kinds of applications need non- blocking DB access. However, many smaller applications actually exist.
  • 14. Most cases? - “Our application is built with Servlet & JDBC. No problem.” - “C10K? It’s not my problem.” - “Just need simple admin CRUD app.” - “Good at Java, but Java in 2013??”
  • 15. Rails?  Reasonable choice for front end apps. I myself am working with API servers in Java and Rails front end at the office. Oops, most of you here would like to write Scala apps, right?
  • 16. Grails?  If you’re not a Groovy lover... Oops, most of you here prefer Scala than Groovy, right?
  • 17. Play2?  I understand Play2 makes Reactive/real- time app development productive. Indeed, looks like Rails app but Play2 is neither new Rails nor new Play1.
  • 18. Skinny! Small & full-stack web app framework in Scala is still absent. So I just started developing Scala on Rails which is named “Skinny Framework”! Built with Scalatra + ScalikeJDBC + more, API is highly inspired by Rails. http://git.io/skinny
  • 19. ORM Example case class Developer(id: Long, groupId: Opion[Long], group: Option[Group] = None, skills: Seq[Skill] = Nil) object Developer extends SkinnyCRUDMapper[Developer] { belongsTo[Group](Group, (d, g) => d.copy(group = g)).byDefault hasManyThrough[Skill](DeveloperSkill, Skill, (d, skills) => d.coply(skills = skills)) def extract ... } Developer.findAll() Developer.findById(123) Developer.createWithAttributes(params.permit(“id”, “groupId”)) Developer.updateById(123).withAttributes(attrs) Developer.deleteById(123)
  • 20. Thanks - There is no async JDBC - ScalikeJDBC introduction - ScalikeJDBC-Async introduction - Skinny Framework introduction