これまでにDoltengプロジェクトでのサンプル確認(その1)、データベースの準備(その2)をやってみたので、
今回はDoltengプロジェクトで作成したプロジェクトをMySQLで動くようにしてみる。
テーブルは(その2)で作ったテーブルのエンティティークラスを生成して、テーブルのデータを取得してJSPから
ブラウザーに表示してみるよ。
(その3)ではそこまでにして、(その4)ではダイレクトにSQLを指定してデータを取得してみたりする。
DB接続設定
jdbc.diconの設定を変更する
H2をコメントアウトして、MySQLのコメントを外す
<!-- for H2 --> <!-- <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "org.h2.Driver" </property> <property name="URL"> "jdbc:h2:tcp://localhost:9092/demo" </property> <property name="user">"sa"</property> <property name="password">""</property> <destroyMethod> @org.seasar.framework.util.DriverManagerUtil@deregisterAllDrivers() </destroyMethod> </component> --> <!-- 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/Brokendish" </property> <property name="user">"root"</property> <property name="password">"ほげ"</property> </component> |
s2jdbc.diconの設定を変更する。
これもH2をコメントアウトして、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">h2Dialect</property> --> <property name="dialect">mysqlDialect</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実行)
適当なところに置いた「mysql-connector-java-5.1.17-bin.jar」を\src\main\webapp\WEB-INF\lib
にコピーする
「s2jdbc-gen-examples\s2jdbc-gen-build.xml」をEclipseのAntエディタで開き 「get-entity」を実行する
生成成功するとこんな感じ
エンティティークラスが生成される
ソースを準備する
プロジェクトのビルドパスに「mysql-connector-java-5.1.17-bin.jar」を追加
**アクション**
IndexAction.javaを修正する ------------------------------
/* * Copyright 2004-2008 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package brokendish.action; import org.seasar.extension.jdbc.JdbcManager; import org.seasar.struts.annotation.Execute; import brokendish.entity.Tekitoo; public class IndexAction { public JdbcManager jdbcManager; public java.util.List<Tekitoo> tekitooList; @Execute(validator = false) public String index() { tekitooList = jdbcManager.from(Tekitoo.class).getResultList(); return "index.jsp"; } } |
**エンティティ**
Tekitoo.java ------------------------------
package brokendish.entity; import java.io.Serializable; import javax.annotation.Generated; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; /** * Tekitooエンティティクラス * */ @Entity @Table(name="tekitoo") @Generated(value = {"S2JDBC-Gen 2.4.43", "org.seasar.extension.jdbc.gen.internal.model.EntityModelFactoryImpl"}, date = "2011/09/19 17:37:49") public class Tekitoo implements Serializable { private static final long serialVersionUID = 1L; /** idプロパティ */ @Column(length = 10, nullable = true, unique = false) public String id; /** msgプロパティ */ @Column(length = 10, nullable = true, unique = false) public String msg; /** nameプロパティ */ @Column(length = 10, nullable = true, unique = false) public String name; /** tmp1プロパティ */ @Column(length = 10, nullable = true, unique = false) public String tmp1; /** tmp2プロパティ */ @Column(length = 10, nullable = true, unique = false) public String tmp2; } |
**サービス**
TekitooService.java ------------------------------
package brokendish.service; import brokendish.entity.Tekitoo; import javax.annotation.Generated; import org.seasar.extension.jdbc.service.S2AbstractService; /** * {@link Tekitoo}のサービスクラスです。 * */ @Generated(value = {"S2JDBC-Gen 2.4.43", "org.seasar.extension.jdbc.gen.internal.model.ServiceModelFactoryImpl"}, date = "2011/09/19 17:38:03") public class TekitooService extends S2AbstractService<Tekitoo> { } |
**JSP**
index.jsp (/SAStrutsMySQL/src/main/webapp/WEB-INF/view/index.jsp) ------------------------------
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Dolteng Auto Generated</title> </head> <body> <h1>Hello World!</h1> <table> <c:forEach var="tekito" varStatus="s" items="${tekitooList}"> <tr> <td>${f:h(tekito.id)}</td> <td>${f:h(tekito.msg)}</td> <td>${f:h(tekito.name)}</td> <td>${f:h(tekito.tmp1)}</td> <td>${f:h(tekito.tmp2)}</td> </tr> </c:forEach> </table> </body> </html> |
動かしてみる
-------------------------------------------------------------------------------------
致命的エラー
↓
※UNIX系OS上のMySQLは大文字小文字を区別するので設定が必要
MySQL では、データベースとテーブルの格納にディレクトリとファイルを使用するため、データベースとテーブル名は、
大文字と小文字の区別がある(ケース依存)ことに注意してください (Windows では、データベースとテーブル名に大文字小文字の区別がありません。
しかし、クエリ内の特定テーブルへの参照では大文字と小文字を完全に合わせる必要があります)。 ああぁーー なので、エンティティークラス「Tekitoo」のテーブル名をアノテーションで設定する。 「@Table(name="tekitoo")」
実行してみる
データ
http://localhost:8080/SAStrutsMySQL/