S2Flex2 DB連携と、10分くらいでできるCRUDアプリ

S2Flex2勉強の続き。
準備編Hello Worldまで出来たらあとはバックエンドとの連携です。*1
データベースの設定*2と、さらにDatabaseViewのscaffoldを利用したCRUDアプリケーションも作ってみます。

データベース設定

jdbc.diconの設定

 データベースの設定はsrc/main/resources/jdbc.diconに記述します。
 jdbc.diconファイルを開き、
  「H2データベースの設定をコメント化」
  「Postgres(または任意のDBMS)のコメントをはずして設定」
 を行います。

JDBCドライバの設定(Postgresの場合)

 http://jdbc.postgresql.org/download.html から、DBバージョンに合ったドライバをダウンロードします。
 ドライバはsrc/main/webapp/WEB-INF/libに配置します。



CRUDアプリケーション作成

ではscaffoldを使用してCRUDの雛型を作成してみましょう。多分ここから10分くらいです(笑)

サンプルテーブルの作成
CREATE TABLE EMP
(ID integer NOT NULL PRIMARY KEY, 
 EMP_NO integer NOT NULL ,
 EMP_NAME varchar(20),
 MGR_ID integer,
 HIREDATE DATE,
 SAL integer,
 DEPT_ID integer), 
 VERSION_NO integer);

INSERT INTO EMP VALUES(1,7369,'SMITH',13,'1980-12-17',800,2,1);
INSERT INTO EMP VALUES(2,7499,'ALLEN',6,'1981-02-20',1600,3,1);
INSERT INTO EMP VALUES(3,7521,'WARD',6,'1981-02-22',1250,3,1);
INSERT INTO EMP VALUES(4,7566,'JONES',9,'1981-04-02',2975,2,1);
INSERT INTO EMP VALUES(5,7654,'MARTIN',6,'1981-09-28',1250,3,1);
INSERT INTO EMP VALUES(6,7698,'BLAKE',9,'1981-05-01',2850,3,1);
INSERT INTO EMP VALUES(7,7782,'CLARK',9,'1981-06-09',2450,1,1);
INSERT INTO EMP VALUES(8,7788,'SCOTT',4,'1982-12-09',3000.0,2,1);
INSERT INTO EMP VALUES(9,7839,'KING',NULL,'1981-11-17',5000,1,1);
INSERT INTO EMP VALUES(10,7844,'TURNER',6,'1981-09-08',1500,3,1);
INSERT INTO EMP VALUES(11,7876,'ADAMS',8,'1983-01-12',1100,2,1);
INSERT INTO EMP VALUES(12,7900,'JAMES',6,'1981-12-03',950,3,1);
INSERT INTO EMP VALUES(13,7902,'FORD',4,'1981-12-03',3000,2,1);
INSERT INTO EMP VALUES(14,7934,'MILLER',7,'1982-01-23',1300,1,1);
DatabaseViewの初期設定*3

 DatabaseViewを表示し、Viewルートを右クリックして「configure connection config」を選択します。
 
 環境に合わせて入力した後は、
 Test Connedctionで接続できるかどうか確認しましよう。

entity/daoの作成*4

 DatabaseViewから 「New Dao or Entity」 を選択します。
 


 Entityを作成します。フィールドの private/public を選択します。*5
 


 Daoの作成です。今回はそのまま終了します
 


 dao/EmpDao.java と entity/Emp.java が生成されているのが確認できます。
 



scaffoldの作成

 DatabaseViewから 「Generate Scaffold Application」 を選択します。
 


 デフォルトのまま終了します。
 


 フロントサイド(Flex)に「エンティティクラス」と「雛形のview.mxml」が生成されているのと、
 サーバサイド(Java)に「サービスクラス」が生成されているのが確認できます。
 



main.xmlの作成

 コード書いてもいいのですが、せっかくなので
 デザイナビューからドラッグアンドドロップしてみます。
 



実行

 Tomcatが起動しているのを確認したら実行してみましょう。
 データが表示されていれば問題なく通信されています。
 更新、削除も可能です。
 



注意点など

scaffoldで作成されるメソッドに selectById というのがありますが、
実テーブルにid列が無い場合にFlex側のPageクラスでエラーになってしまいます。*6
この場合、「ID」を使用している部分を実テーブルのプライマリーキーに置き換えてあげましょう。

さっくり

scaffoldを使用すれば、簡単にFlexJavaの雛型クラスを作成してくれます。
うまく活用してさくさく開発しましょう。

*1:S2FlexS2Dao

*2:今回はPostgres

*3:この設定ってjdbc.diconから持ってこれないのかな?

*4:いきなりscaffoldでもentity/daoクラスは生成されますが、自動生成だとうまくいかない場合もあるようです

*5:Flex3用のコンポーネントを使っている場合はpublicで問題ありませんが、そうでは無い場合は privateにしないとエラーになりますので注意!

*6:固定で「ID」という列をプライマリーキーとみなしているようです