続き。
EclipseからrunしたらCtrl+Dで止まらないのでバッチを作りました。
でも、エラーはEcliseコンソールに出てほしい人だから、
PIDでjava.exeをkillするバッチを作って無理やり止めてもいいかもしれない。
さておき。
今回の目標
「DBアクセスができるようにしたい」
普段はOracle+JDBCで接続している私ですが、
今回はMySQL+EbeanでのDBアクセスにチャレンジ。
Playの推奨しているH2を使ってみてもいいのだけれど、
あれってオブジェクトブラウザでクエリ叩いたりできるの?
①MySQLをセットアップする
XAMPPがインストール済みだったので既にありました。
これはまぁ特に困ることはないはずなので割愛。
②MySQLにA5からアクセスできるようにする
phpMyAdminでも十分といえば十分なのですが、
A5好きなので接続できるようにしておきたい。
2. http://localhost/phpmyadmin にアクセスして、
ユーザを作るなりrootのパスワードを変更するなりする。
なんだかんだでコマンドラインの方がやりやすかったりすることもあるので、
mysqlにパスを通しておくとよい。
3. A5で「データベースの追加と削除」⇒「追加」⇒「MySQL(直接接続)」
ユーザとパスワードは2で設定したもの。
③PlayにDB設定を適用
1. conf/application.confに以下を追加。
db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://localhost:3306/test_db" db.default.user=test_db db.default.password="test_db" ebean.default="dbmodels.*"
もちろんユーザとかパスワードとかは各自で。
ebean.defaultはエンティティとして利用したクラスを置くパッケージを指定。
2. project/pulugins.sbtに以下を追加。
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")
コメントアウトされているだけかも
3. build.sbtに以下を追加。
lazy val root = (project in file(".")).enablePlugins(PlayEbean)
libraryDependenciesの中に
"mysql" % "mysql-connector-java" % "5.1.31"
5. 更新を反映
activatorコンソールで「reload」と「update」を実行。
これってやらなくても起動時に反映されるの…?
④エンティティの作成
ebean.default="dbmodels.*"と設定したので、
エンティティはdbmodelsパッケージの配下に作成する。
1. com.avaje.ebean.Modelを継承してエンティティクラスを作成する。
2. クラスにEntityアノテーションをつける。
3. publicフィールドでカラムを定義し、主キーにはIdアノテーションをつける。
4. finderをstaticで定義する。
@Entity public class User extends Model { @Id public Long id; public String name; public static Find<Long, User> find = new Find<Long, User>() {}; }
⑤コントローラで呼び出してみる
List<Message> datas = Message.find.all();
この状態でサーバを起動してみると、
「Database 'default' needs evolution!」というメッセージが出る。
「Apply this script now!」をクリックするとデータベースにテーブルが勝手にできる。
すごい!
ちなみに編集するとまたこの画面が出て反映してくれるらしい。
※最初にフィールドにDate型を設定したらテーブルができなかった。
なんでかと思っていろいろ調べていたら、MySQLのバージョンが古かったため、
生成されるSQLが構文エラーになっていた。
SQLファイル自体はconf/evolutions/defaultの下に生成されるので、
適当にいじって手動で流せば大丈夫かも。(MySQLのバージョンを上げろって話…)
一応これでDBアクセスができるようになった。
設定とかは難しいけれど、いったん作ってしまえば簡単にできそう…かな?