LoginSignup
2
2

More than 5 years have passed since last update.

finatra 二歩目

Last updated at Posted at 2016-06-23
1 / 9

前回


今回は

前回簡単にjsonデータのやり取りが出来たので、今回はDBにデータを保存するところをやりたいと思います


Quill

使用するのはQuillです。
http://getquill.io#quotation-introduction
Slickでもなく、ScalikeJDBCでもなくQuillです。

参考

http://takezoe.hatenablog.com/entry/2016/03/03/210701
http://yuutookun.hatenablog.com/entry/2016/03/07/081722


マッピング

QuillはSlickと違ってcase classをそのままテーブル定義として扱うことが出来るようです。
そのためcase classとテーブル定義は完全一致していなければなりません。(大文字小文字もひっくるめて完全一致です!)
http://getquill.io#extending-quill-mapped-encoding のNaming strategyを見ると、SnakeCaseとかの指定で、完全でなくても良いのかもしれませんが


sbt

buid.sbt
  "io.getquill" % "quill-async_2.11" % "0.6.0",
  "com.zaxxer" % "HikariCP" % "2.4.3",
  "com.typesafe" % "config" % "1.3.0"

設定

mysql

↓を参考にdockerでmysqlを立ち上げておいてスキーマとテーブルを作成します。
http://qiita.com/T0000N/items/e5bac2e5bcdf476824f6

1.sql
-- MySQL Script generated by MySQL Workbench
-- 06/24/16 00:07:32
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema handshake
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema handshake
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `handshake` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `handshake` ;

-- -----------------------------------------------------
-- Table `handshake`.`Groups`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `handshake`.`Groups` (
  `group_id` BIGINT(20) NOT NULL COMMENT '',
  `name` VARCHAR(45) NOT NULL COMMENT '',
  PRIMARY KEY (`group_id`)  COMMENT '')
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

application.conf

application.conf
db.host=192.168.99.100
db.port=32773
db.user=root
db.password=topsecret
db.database=handshake
db.poolMaxQueueSize=4
db.poolMaxObjects=4
db.poolMaxIdle=999999999
db.poolValidationInterval=100

Code

package repository

import io.getquill._
import io.getquill.naming.Literal
import models.Groups

import scala.concurrent.ExecutionContext.Implicits.global

/**
  * Created by Fumiyasu on 2016/06/22.
  */
class GroupRepository {

  lazy val db = source(new MysqlAsyncSourceConfig[Literal]("db"))

  def save(groups: Groups) = {

    val q = quote(query[Groups].insert)
    db.run(q)(List(groups))
  }
}

今回はMysqlを使用するのでMysqlAsyncSourceConfigを使用します。
Literalはcase class完全一致だと思います。

たったこれだけのコードでインサート出来るという。。。
インサート処理ですが、
db.run(q)(groups)でもイケるみたいなことがドキュメントにありますが、Listにしないとエラーになりました。。。(なんで?


今回はここまで

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2