Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2009/08/07 (Fri)

エンティティ作成

|  エンティティ作成 - ひとり開発日記。 を含むブックマーク はてなブックマーク -  エンティティ作成 - ひとり開発日記。

http://i25.tinypic.com/20q0uhi.png

プロジェクト直下で以下のように打つ。

> ant -f s2jdbc-gen-build.xml gen-entity

すると、s2jdbc.dicon/jdbc.diconに記述されているDB接続情報を元に、DBアクセス、テーブル情報をなめてテーブルに対応したエンティティクラス、namesクラス(S2JDBCのタイプセーフアクセス用クラス)、AbstractService、サービスクラスを作ってくれるんだけど、便利な反面、ちょっと使い辛い…。

特に、エンティティクラスは、自動生成で出来たのを素のまま使うんじゃなくて、ちょっと変更して使いたいのだけれど。

なので、自分はs2jdbc-gen-build.xmlを上記のように書き換えて使っています。

ユーザー情報のテーブルを作る。

|  ユーザー情報のテーブルを作る。 - ひとり開発日記。 を含むブックマーク はてなブックマーク -  ユーザー情報のテーブルを作る。 - ひとり開発日記。

CREATE TABLE `registed_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(64) NOT NULL DEFAULT '',
  `address` varchar(255) NOT NULL DEFAULT '',
  `password` varchar(32) NOT NULL DEFAULT '',
  `short_profile` text NOT NULL,
  `profile` text NOT NULL,
  `status` varchar(16) NOT NULL DEFAULT 'REGISTED',
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `address` (`address`),
  KEY `status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

なんでregisted_userなんてテーブル名にしたかって言うと、userだけだと他のDBでは予約語だったり、隠しテーブルだったりすることが多いので。 Ruby on RailsGrailsデフォルトみたいにpersonっていうのも、ちょっとね…。

text型やdatetime型*1デフォルト値が設定できなかったりとか、結構「…。」な仕様が多いMySQLなんですけど、まぁええことよ。

ユーザー登録の仕組みを考える

|  ユーザー登録の仕組みを考える - ひとり開発日記。 を含むブックマーク はてなブックマーク -  ユーザー登録の仕組みを考える - ひとり開発日記。

ユーザー登録に必要な項目を以下のように定義する。

どういう順番で入力させるのが良いかな、とか考える。

  1. メールアドレス/ユーザーID/パスワードを入力、確定
  2. 確認メールが届き、それに載っているURLアクセス
  3. 完了画面表示
  4. 本登録終了メールが届く

Yahoo!とかlivedoorとかポータル系はこのパターンが大半かもしれない。

  1. メールアドレス入力、確定
  2. 確認メールが届き、それに載っているURLアクセス
  3. ユーザーIDとパスワード入力、確定
  4. 本登録終了メールが届く

最近はこのパターンが多いかな? pixivとか。

今回の「mzkrプロジェクト(仮)」では、前者のパターンでやってみようかと思います。

ローカルに作成したDBに接続

|  ローカルに作成したDBに接続 - ひとり開発日記。 を含むブックマーク はてなブックマーク -  ローカルに作成したDBに接続 - ひとり開発日記。

pom.xml書き換え

pom.xmlを書き換えて、デフォルト設定のH2に代わって、MySQLコネクターインストール

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.0.69</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency> 

s2jdbc.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>

<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">mysqlDialect</property>

dialect部分をMySQL用に書き換え。

jdbc.diconを書き換え

h2の設定部分をコメントアウトMySQLコメントアウト部分を外す。

<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/mzkrdb"
    </property>
    <property name="user">"halflite"</property>
    <property name="password">"**********"</property>
</component>

サーバーで実際に動かす

http://i31.tinypic.com/34zzwna.png

M2 Pluginで依存関係の更新、コンパイルMaven2 Additional PluginでWEB-INF/lib以下を更新、デバッグ用のサーバーを起動して、動くことを確認。

ローカルに DB作成

| ローカルに DB作成 - ひとり開発日記。 を含むブックマーク はてなブックマーク - ローカルに DB作成 - ひとり開発日記。

> mysql -u root -p

で、MySQLログイン

mysql> GRANT ALL PRIVILEGES ON *.* TO halflite@localhost IDENTIFIED BY '*****' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> QUIT

管理者権限を持つユーザー"halflite"、パスワードは"*****"(適当な文字列)を作って、いったんログアウト。

> mysql -u halflite -p

さっき作ったユーザー名でログイン

mysql> CREATE DATABASE mzkrdb CHARACTER SET utf8;
mysql> SHOW DATABASES;

DBを作成し、DBが作られていることを確認。

MySQLリファレンス

|  MySQLリファレンス - ひとり開発日記。 を含むブックマーク はてなブックマーク -  MySQLリファレンス - ひとり開発日記。

MySQL久々に触るんで、コマンド忘れまくり…。

Stax上にDBを作った

|  Stax上にDBを作った - ひとり開発日記。 を含むブックマーク はてなブックマーク -  Stax上にDBを作った - ひとり開発日記。

http://i28.tinypic.com/iom2cl.png

サーバーのアドレスは、ちょっと伏せさせて下さい。 パスワード総当り攻撃とかされて、アカウントbanされてもアレですし…。

「mzkrプロジェクト(仮)」発足

|  「mzkrプロジェクト(仮)」発足 - ひとり開発日記。 を含むブックマーク はてなブックマーク -  「mzkrプロジェクト(仮)」発足 - ひとり開発日記。

http://i25.tinypic.com/24gvfh5.png

プロジェクトは、「mzkrプロジェクト(仮)」。 パッケージも、"net.halflite.mzkr"と切ってみました*2

どんな機能かは、まだ秘密…?!

本日のTODO

|  本日のTODO - ひとり開発日記。 を含むブックマーク はてなブックマーク -  本日のTODO - ひとり開発日記。

  1. リポジトリ確保
  2. Stax上にDBを作成
  3. ローカル内でDB作成+接続

*1:timestamp型だと更にハマりが多い…。

*2:halflite.netは、私の持っているドメインです。 http://halflite.net/

トラックバック - http://program.g.hatena.ne.jp/halflite/20090807