# 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