Technofara

Golangエンジニア!仕事で必要になって勉強した事とか、新しい事とか色々まとめたりを緩くやります。技術系と思考系だけにしておきます、

# play2からlocalhostのmysqlに接続するには、、

play2とか関係なしに、どの言語勉強してても DBをつかってなんやかんやしたくなる時ってある

って事で、play2アプリケーションからmysqlに接続するように設定をしてみようと思う。

play2とmysqlの接続設定

肝心の接続の仕方は、 jdbcドライバーを使ってだね、 ローカルのmydbに接続してだね、、、

まずは、jdbcを使う事と、何処のmysqlにつなぐのかを設定ファイルに記述

$ vim conf/application.conf
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:13306/mydb"
db.default.user=root
db.default.password=""

#実行されたSQLを出力するように指定
db.default.logStatements=true

JDBCドライバも取得する必要があるので、 build.sbtファイルに、mysql-connectorを追記

$ vim build.sbt
libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,                                     
  "mysql" % "mysql-connector-java" % "5.1.24"
)

依存ライブラリなどなどを取得しておく。 確認の為に

$ play
..
..
[hoge] $ reload
[hoge] $ dependencies
[hoge] $ exit

DBスキーマの定義、管理

ここまで準備ができたら、次はDBのテーブルつくったりとか、そういう事やります。

play2では、Evolutionsというものが用意されていて Evolutionsを使って、DBスキーマを管理できるみたい。 Railsとかのマイグレーションとは、違うんやね(そういうのもあるのかな?でも今回はこれ)

Evolutions作成!

DBスキーマ定義ファイル作成場所は、 conf/evolutions/default/ です。defaultというのは、 db.default....とさっきつくったファイルに定義したと思うんやけど そのDBに対しての設定ファイルをおいてますよーって事

命名規則は、1,2と順につけること、

conf/evolutions/default/1.sqlを作成してみる。 中身は、以下の内容

# --- !Ups
create table User (
  id int(10) not null auto_increment,
  name varchar(100),
  email varchar(100),
  password varchar(100),
  createDate timestamp default current_timestamp(),
primary key(id));
# --- !Downs
drop table User;

conf/evolutions/default/2.sqlも作ってみる

# --- !Ups
create table Post (
  id int(10) not null auto_increment,
  userId int(10) not null,
  title varchar(100) not null,
  body text,
  createDate timestamp default current_timestamp(),
  primary key(id),
  foreign key(userId) references USer(id)
);
# --- !Downs
drop table Post;                                       

Ups,Downsは、見た感じの意味です! コメントは今回用ではなく、グルーピングの為に記述は必須だそうです。

じゃぁ実行してみよう

play2サーバを起動して、立ち上げたページにブラウザでアクセス。

play run
http://localhost:9000/

すると、エラー画面的なものが表示

Apply this script now!をクリックして、sqlを実行します。 実行完了したら、いつものwelcomeページになります。

ほ、、ほんとうにmysqlに反映されてるのか確認

$ mysql -u root

mysql> use mydb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables_in_mydb  |
+-----------------+
| Post            |
| User            |
| play_evolutions |
+-----------------+
3 rows in set (0.00 sec)

おおUserが出来てぃぃぃぃぃる!

mysql> desc User;
+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(10)      | NO   | PRI | NULL              | auto_increment |
| name       | varchar(100) | YES  |     | NULL              |                |
| email      | varchar(100) | YES  |     | NULL              |                |
| password   | varchar(100) | YES  |     | NULL              |                |
| createDate | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+


mysql> desc Post;
+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(10)      | NO   | PRI | NULL              | auto_increment |
| userId     | int(10)      | NO   | MUL | NULL              |                |
| title      | varchar(100) | NO   |     | NULL              |                |
| body       | text         | YES  |     | NULL              |                |
| createDate | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+

おおおお、テーブルもできてる!! とりあえず、これで テーブル作成まで完了!!

今回の設定は、前回boxenで作ったmysqlに対して接続してるので、多少ポートなりなんなりが作り方によって変わると思います。 http://shinofara.hateblo.jp/entry/2014/01/16/232308

参考

http://www.atmarkit.co.jp/ait/articles/1307/02/news021.html