s2jdbc-tutorialのセットアップとMySQL
S2JDBCの機能を知るにはS2のページにある「s2jdbc-tutorial」をインストールして実際に動かして見るのが手っ取り早い。
s2jdbc-tutorialプロジェクトのインポート
Seasarのホームページ(Seasar2 -
Downloads)よりS2JDBC-Tutorialをダウンロードする。
(今回ダウンロードしたファイルはS2JDBC-Tutorial-2.4.41.zipです。)
ダウンロードしたファイルをeclipseのプロジェクトとしてインポートする。
Eclipseのメニューより「ファイル(F)」→「インポート(I)...」より表示されるダイアログボックスにて「一般」→「既存プロジェクトをワークスペースへ」を選択して「次へ(N)」ボタンを押す。
「アーカイブ・ファイルの選択(A)」を選択して「参照(R)ボタン」でダウンロードしたZipファイルを指定する。
完了ボタンを押すとインポートが完了する。
「s2jdbc-tutorial」プロジェクトがパッケージエクスプロラーに表示される。
インポートしただけではコンパイルエラーが発生しています。
これを消すためにはSeasar2 - S2JDBC - チュートリアルのページを参考にソースコードの修正が必要ですが、先にデータベースの準備をおこなうのでここではひとまずエラーがでたまま、後で修正する事にします。
MySQLの設定
「s2jdbc-tutorial」にはあらかじめテスト用のデータベースとしてHSQLDBが組み込まれてるが,ここではそれをMySQLに変更した上で動作させてみよう。
MySQLはxamppでインストール。
テスト用のデータベース「MyTest」を作成。
create database MyTest;
/sa-struts-tutorial/sql/create.sqlにサンプル用のテーブルを作成するためのスクリプトが入っているが、これはそのままではMySQLでは使用できないので、departmentテーブルのid列の定義のオートインクリメントの部分を以下のように変更します。
また、MySQLで外部キーを使用できるようにInnoDBを指定する。
addressとemployeeテーブルのid列も同様に変更してスクリプトを実行します。
create table department ( primary key (id) , id integer not null auto_increment, name varchar(255) not null, version integer not null )ENGINE = InnoDB;
DBViewerPluginで作成したMySQLのデータベースMyTestに接続する。
プロジェクトよりMySQLにアクセスできるようにMySQLのJDBCドライバー「mysql-connector-java-5.1.7-bin.jar」を
MySQL -- Download
Connector-Jよりダウンロード。
/s2jdbc-tutorial/libフォルダーにコピーし、eclipseにてコピーしたjarファイルを選択し、
右クリックメニューより「ビルド・パス(B)」→「ビルド・パスに追加(A)」を選択しプロジェクトのclasspathに追加する。
次に、DBViewerPluginよりMySQLのデータベースMyTestに接続するためにDBViewerPluginに登録をおこなう。
DBツリー・ビューにてDBViewerPluginアイコンを右クリックして登録を選択、表示されるダイアログボックスにて データベース定義名を入力(ここでは定義名としてMySQLを指定している)、ファイルの追加ボタンにて/s2jdbc-tutorial/libフォルダーにコピーした「mysql-connector-java-5.1.7-bin.jar」を指定する。
データベースの接続文字列とユーザID,パスワードを指定して次へボタンを押す。
ここでは接続文字列として上記で作成したデータベースMyTestと接続するため「jdbc:mysql://localhost:3306/MyTest」を指定、ユーザIDとしてrootを,パスワードはなしを指定している。
次の画面でMySQLのキャラクタコード(ここではutf-8)を指定している。
DBViewerに表示させたいデータベース(mytest)にチェックを付ける,表示させたくないデータベースのチェックははずす。
完了ボタンで設定は終了する。
テーブルの作成をおこなうスクリプトの実行をDBViewerPluginのSQLエディタより実行する事もできます。
パッケージエクスプローラよりMySQL用に修正したSQLファイルを選択し、右クリック→アプリケーションから開く(H)→SQLエディタを選択してSQLファイルを開きます。
SQLエディタ上部のプルダウンリストより「MyTest :
MySQL」を選択、SQLを修正し、SQLエディタ上で右クリックして、SQLの整形(F)を選択した後、SQLの実行ボタンを押します。
以下にMySQLのテーブル作成に使用したSQLファイルを示します。
CREATE TABLE department( PRIMARY KEY (id) ,id INTEGER NOT null auto_increment ,name VARCHAR(255) NOT null ,version INTEGER NOT null ) ENGINE = InnoDB / CREATE TABLE address( PRIMARY KEY (id) ,id INTEGER NOT null auto_increment ,name VARCHAR(255) NOT null ,version INTEGER NOT null ) ENGINE = InnoDB / CREATE TABLE employee( PRIMARY KEY (id) ,id INTEGER NOT null auto_increment ,name VARCHAR(255) NOT null ,job_type INTEGER NOT null ,salary INTEGER ,department_id INTEGER ,address_id INTEGER ,version INTEGER NOT null ,CONSTRAINT EMPLOYEE_FK1 FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENT(ID) ,CONSTRAINT EMPLOYEE_FK2 FOREIGN KEY (ADDRESS_ID) REFERENCES ADDRESS(ID) ) ENGINE = InnoDB / INSERT INTO DEPARTMENT VALUES(1,'ACCOUNTING',1)/ INSERT INTO DEPARTMENT VALUES(2,'RESEARCH',1)/ INSERT INTO DEPARTMENT VALUES(3,'SALES',1)/ INSERT INTO DEPARTMENT VALUES(4,'OPERATIONS',1)/ INSERT INTO ADDRESS VALUES(1,'STREET 1',1)/ INSERT INTO ADDRESS VALUES(2,'STREET 2',1)/ INSERT INTO ADDRESS VALUES(3,'STREET 3',1)/ INSERT INTO ADDRESS VALUES(4,'STREET 4',1)/ INSERT INTO ADDRESS VALUES(5,'STREET 5',1)/ INSERT INTO ADDRESS VALUES(6,'STREET 6',1)/ INSERT INTO ADDRESS VALUES(7,'STREET 7',1)/ INSERT INTO ADDRESS VALUES(8,'STREET 8',1)/ INSERT INTO ADDRESS VALUES(9,'STREET 9',1)/ INSERT INTO ADDRESS VALUES(10,'STREET 10',1)/ INSERT INTO ADDRESS VALUES(11,'STREET 11',1)/ INSERT INTO ADDRESS VALUES(12,'STREET 12',1)/ INSERT INTO ADDRESS VALUES(13,'STREET 13',1)/ INSERT INTO ADDRESS VALUES(14,'STREET 14',1)/ INSERT INTO EMPLOYEE VALUES(1,'ALLEN',1,1600,3,1,1)/ INSERT INTO EMPLOYEE VALUES(2,'WARD',1,1250,3,2,1)/ INSERT INTO EMPLOYEE VALUES(3,'JONES',2,2975,2,3,1)/ INSERT INTO EMPLOYEE VALUES(4,'MARTIN',1,1250,3,4,1)/ INSERT INTO EMPLOYEE VALUES(5,'BLAKE',2,2850,3,5,1)/ INSERT INTO EMPLOYEE VALUES(6,'CLARK',2,2450,1,6,1)/ INSERT INTO EMPLOYEE VALUES(7,'SCOTT',3,3000.0,2,7,1)/ INSERT INTO EMPLOYEE VALUES(8,'KING',4,5000,1,8,1)/ INSERT INTO EMPLOYEE VALUES(9,'TURNER',1,1500,3,9,1)/ INSERT INTO EMPLOYEE VALUES(10,'ADAMS',0,1100,2,10,1)/ INSERT INTO EMPLOYEE VALUES(11,'JAMES',0,950,3,11,1)/ INSERT INTO EMPLOYEE VALUES(12,'FORD',3,3000,2,12,1)/ INSERT INTO EMPLOYEE VALUES(13,'MILLER',0,1300,1,13,1)/ INSERT INTO EMPLOYEE VALUES(14,'SMITH',0,800,2,14,1)/ COMMIT/
S2JDBCの設定ファイルをMySQL用に修正します。
/s2jdbc-tutorial/src/main/resources/jdbc.diconを開き、HSQLDB用の設定をコメントにします。
<!-- for HSQLDB --> <!-- <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "org.hsqldb.jdbcDriver" </property> <property name="URL"> "jdbc:hsqldb:file:" + @org.seasar.framework.util.ResourceUtil@getBuildDir('app.dicon').getCanonicalPath() + "/data/test" </property> <property name="user">"sa"</property> <property name="password">""</property> </component> -->
MYSQL用の設定のコメントをはずして、データベース名,ユーザIDとパスワードの設定を修正します。
<!-- MySQL - MySQL4.0以下でマルチバイト文字を扱う場合には,URL指定の後に, 以下の接続パラメータを追加で指定してください. useUnicode=true characterEncoding=[MySQLのエンコーディングに対応した Javaのエンコーディング名] 例:"jdbc:mysql://localhost:3306/test?useUnicode=true" + "&characterEncoding=Windows-31J" - MySQL5.0以降で,エンコーディングがeucjpmsの列を扱う場合には, URL指定の後に,以下の接続パラメータを追加で指定してください. characterEncoding=UTF-8またはWindows-31J characterSetResults=UTF-8またはWindows-31J 例:"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" + "&characterSetResults=UTF-8" この指定をしない場合,Java側でUCS-2⇔EUC_JP_Solarisの変換が 行なわれるため,ユーザー定義外字などの一部の文字が化けます. この指定をすることで,MySQL側でeucjpms⇔ucs2⇔utf8(cp932)の 変換が行なわれ,Java側でUCS-2⇔UTF-8(Windows-31J)の変換が 行なわれるようになります.この結果,文字化けを防げます. なおJIS X 0212(補助漢字)を使用する場合は,Windows-31Jではなく UTF-8を指定する必要があります. - 上記以外の場合は,my.cnfでdefault-character-setの設定を適切に (cp932やutf8など.デフォルトのlatin1は不可)行なっていれば, 文字化けは防げます. --> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "com.mysql.jdbc.Driver" </property> <property name="URL"> "jdbc:mysql://localhost:3306/mytest" </property> <property name="user">"root"</property> <property name="password">""</property> </component> <!-- for SQLServer -->
設定ファイルs2jdbc.diconの修正
/s2jdbc-tutorial/src/main/resources/s2jdbc.diconを開き、HSQLDB用の設定をコメントにし、MySQLの設定のコメントをはずします。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="jdbc.dicon"/> <include path="s2jdbc-internal.dicon"/> <component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"> <property name="maxRows">0</property> <property name="fetchSize">0</property> <property name="queryTimeout">0</property> <!-- <property name="dialect">hsqlDialect</property> <property name="dialect">db2390Dialect</property> <property name="dialect">db2400Dialect</property> <property name="dialect">db2Dialect</property> <property name="dialect">derbyDialect</property> <property name="dialect">firebirdDialect</property> <property name="dialect">h2Dialect</property> <property name="dialect">hsqlDialect</property> <property name="dialect">interbaseDialect</property> <property name="dialect">maxdbDialect</property> <property name="dialect">mssql2005Dialect</property> <property name="dialect">mssqlDialect</property> --> <property name="dialect">mysqlDialect</property> <!-- <property name="dialect">oracleDialect</property> <property name="dialect">postgreDialect</property> <property name="dialect">standardDialect</property> <property name="dialect">sybaseDialect</property> --> </component> </components>
S2JDBC-Genによるテーブルのエンティティの自動生成とソースコードの修正
「s2jdbc-tutorial」プロジェクトのコンパイルエラーを取り除くためにテーブルのエンティティを作成します。
パッケージ・エクスプローラを見ると/s2jdbc-tutorial/src/main/javaの中のファイルは下図のようになっています。
S2JDBC-Genを使用してデータベースのテーブルのエンティティクラスを自動生成します。
eclipse3.4の場合
eclipse3.4の場合は以下のようにeclipseからantを実行してエンティティクラスを作成する事ができます。
s2jdbc-tutorialプロジェクト直下にある「s2jdbc-gen-build.xml」を右クリックして表示されるメニューより「実行(R)」→「Antのビルド...」を選択します。
ダイアログボックスにて「gen-entity」を選択して実行ボタンを押します。
パッケージ・エクスプローラにてプロジェクトをリフレッシュ(F5キー)するとテーブルのエンティティが自動生成されていることがわかります。
eclipse3.5の場合
eclipse3.5の場合はeclipseからantを使ってs2jdbc-gen-build.xmlのタスクを実行できないようです。
別途antをインストールして、コマンドラインより以下のようにs2jdbc-gen-build.xmlの「gen-entity」をターゲットに指定してantを実行します。
ant -f s2jdbc-gen-build.xml gen-entity
詳しくは Seasar2 - S2JDBC-Gen - セットアップ を参照して下さい。
Enum クラスJobTypeの修正
src/main/java/examples/entity/Employee.javaを開き、jobTypeプロパティの型をIntegerからJobTypeに変更します。
public JobType jobType;
プロジェクトを再度リフレッシュ(F5キー)するとコンパイルエラーがなくなっている事がわかります。
Doltengのデータベースビューへプロジェクトを表示
Doltengのデータベースビューへプロジェクトが認識されているかどうか確認します。
パッケージ・エクスプローラよりプロジェクトを選択、さらに右クリックメニューのプロパティを選択、表示されるダイアログボックスで左側ペインのDoltengを選択し、下図のように設定されている事を確認します。
設定が合っていない場合は設定します。
データベースビューを表示するとs2jdbc-tutorialプロジェクトが表示,認識されています。