s2jdbc-tutorialのセットアップとMySQL


S2JDBCの機能を知るにはS2のページにある「s2jdbc-tutorial」をインストールして実際に動かして見るのが手っ取り早い。

s2jdbc-tutorialプロジェクトのインポート

Seasarのホームページ(Seasar2 - Downloads)よりS2JDBC-Tutorialをダウンロードする。
(今回ダウンロードしたファイルはS2JDBC-Tutorial-2.4.41.zipです。)

 

s2jdbc_Tutorial1

 

ダウンロードしたファイルをeclipseのプロジェクトとしてインポートする。

Eclipseのメニューより「ファイル(F)」→「インポート(I)...」より表示されるダイアログボックスにて「一般」→「既存プロジェクトをワークスペースへ」を選択して「次へ(N)」ボタンを押す。

 

SAStruts_install_tutorial1

「アーカイブ・ファイルの選択(A)」を選択して「参照(R)ボタン」でダウンロードしたZipファイルを指定する。

 

s2jdbc_Tutorial2

 

完了ボタンを押すとインポートが完了する。

「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」を指定する。

 

s2jdbc_Tutorial4

 

データベースの接続文字列とユーザID,パスワードを指定して次へボタンを押す。
ここでは接続文字列として上記で作成したデータベースMyTestと接続するため「jdbc:mysql://localhost:3306/MyTest」を指定、ユーザIDとしてrootを,パスワードはなしを指定している。

 

s2jdbc_Tutorial5

 

次の画面でMySQLのキャラクタコード(ここではutf-8)を指定している。

DBViewerに表示させたいデータベース(mytest)にチェックを付ける,表示させたくないデータベースのチェックははずす。

 

s2jdbc_Tutorial6

 

完了ボタンで設定は終了する。

 

s2jdbc_Tutorial7

 

テーブルの作成をおこなうスクリプトの実行をDBViewerPluginのSQLエディタより実行する事もできます。
パッケージエクスプローラよりMySQL用に修正したSQLファイルを選択し、右クリック→アプリケーションから開く(H)→SQLエディタを選択してSQLファイルを開きます。
SQLエディタ上部のプルダウンリストより「MyTest : MySQL」を選択、SQLを修正し、SQLエディタ上で右クリックして、SQLの整形(F)を選択した後、SQLの実行ボタンを押します。

 

s2jdbc_Tutorial8

 

以下に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用に修正します。

設定ファイルjdbc.diconの修正

/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" +
		"&amp;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" +
		"&amp;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_Tutorial9

 

S2JDBC-Genを使用してデータベースのテーブルのエンティティクラスを自動生成します。

eclipse3.4の場合

eclipse3.4の場合は以下のようにeclipseからantを実行してエンティティクラスを作成する事ができます。

s2jdbc-tutorialプロジェクト直下にある「s2jdbc-gen-build.xml」を右クリックして表示されるメニューより「実行(R)」→「Antのビルド...」を選択します。

 

s2jdbc_Tutorial3

 

ダイアログボックスにて「gen-entity」を選択して実行ボタンを押します。

 

s2jdbc_Tutorial10

 

パッケージ・エクスプローラにてプロジェクトをリフレッシュ(F5キー)するとテーブルのエンティティが自動生成されていることがわかります。

 

s2jdbc/s2jdbc_Tutorial11

 

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に変更します。

Enum クラスを利用する

public JobType jobType;

プロジェクトを再度リフレッシュ(F5キー)するとコンパイルエラーがなくなっている事がわかります。

Doltengのデータベースビューへプロジェクトを表示

Doltengのデータベースビューへプロジェクトが認識されているかどうか確認します。

 パッケージ・エクスプローラよりプロジェクトを選択、さらに右クリックメニューのプロパティを選択、表示されるダイアログボックスで左側ペインのDoltengを選択し、下図のように設定されている事を確認します。

設定が合っていない場合は設定します。

 

s2jdbc_Tutorial12

 

データベースビューを表示するとs2jdbc-tutorialプロジェクトが表示,認識されています。

 

ページのトップへ戻る