買い物かごを実装する
第7回で実装する認証機能ができるまでは、買い物かごの内容はユーザid「tomoharu」に紐づいたもののみ保存されることになります。HttpSessionに保持するのは「銘柄名」「単価」「本数」のみとし、それ以外の項目はその都度計算により求め表示します。また、HttpSessionの情報は変化があるたびにbasketテーブルを更新するようにします。basketテーブルもHttpSessionに保持している内容のみで、他の項目は計算可能であるため格納しません。
買い物かごと言っても情報自体は非常にシンプルで銘柄名(name)、単価(price)、本数(quantity)のプロパティを持った単なるJava Beansを買い物かごの1明細に見立て、そのArrayListがテーブルに相当するようにします。まずはJava Beansから作成します。
買い物かごの1明細に相当するJava Beansクラスを作成
[プロジェクトウィンドウ]-[ImoshochuWeb01]を選択、右クリックで[新規]-[Java クラス]と操作します。[新規Javaクラス 名前と場所]画面が開きます。クラス名に「basketItem」、パッケージに「jp.kawakubo」と入力し、[完了]ボタンをクリックします。エディタが開き、basketItemクラスの編集が可能となります。
まず、3つのプロパティをprivateで宣言します。nameはString、priceとquantityはintで宣言します。getter/setterメソッドは、エディタ内で右クリックし、[リファクタリング]-[フィールドをカプセル化]と操作すると、[フィールドをカプセル化]画面が表示されます。各フィールドに対し「取得メソッドを作成」、「設定メソッドを作成」のチェックボックスがあります。immutableなbeans(プロパティに値を設定した後、プロパティの値を変更できないbean)を作成する場合は、「取得メソッドを作成」のみチェックし、設定はコンストラクタで行うようにします。今回は自由に値を変えれるように全てチェックを入れます。項目が多い時は、右側の[すべてを選択]ボタンをクリックすると自動的に全てにチェックが入ります。業務システムなど大量のプロパティがある場合非常に便利な機能です。[リファクタリング]ボタンをクリックすると3つのフィールドのsetter/getterメソッドが作成されます。当クラスはインスタンス化しArrayListに追加しHttpSessionに格納します。
basketテーブルを作成
第4回で作成したimoshopデータベースにbasketテーブルを作成します。NetBeansで[サービスウィンドウ]-[データベース]-[MySQL サーバー]を選択、右クリックし[管理ツールを実行]を選択すると、MySQL Workbenchが起動します。図1のように[home]タブは大きく「SQL Development」、「Data Modeling」「Server Administration」の3つに分かれています。
テーブルを作成するにはSQL Developmentを使います。図2のように[Overview]タブを選択、[Add Table]アイコンをクリックすると、[new_table]画面が開きます。下の方にある[Table]タブをクリックすると、図3のような画面が開きます。Nameに「basket」を入力します。Engineについては多くの種類があり、後方互換性を保つために残されているものなどがあるため注意すべきですが、ここではデフォルトのままでも構いません。
次に[Columns]タブをクリックすると図4のような画面が開きます。ここで必要なカラムとその属性を指定します。先述した3つのプロパティ以外に主キーのためのidというカラムを追加しています。AIとはAUTO_INCREMENTのことで自動的に採番されます。デフォルトでは1からの連番となります。INDEXやFOREIGN KEYの指定もタブが用意されておりGUI画面で定義できます。[apply]ボタンをクリックすると図5のように[Apply Object Changes]画面が開きます。GUI画面で定義したものがCREATE文として表示されます。直接SQL文を打つことに慣れた方はこの画面で確認してGUI画面での定義を覚えることもできます。[apply]-[Finish]でテーブルの作成が完了します。

![図1.Workbenchの[home]タブ画面](http://cz-cdn.shoeisha.jp/static/images/article/4900/GlassFish_5_101_s.gif)
![図2.[Overview]タブ画面](http://cz-cdn.shoeisha.jp/static/images/article/4900/GlassFish_5_102_s.gif)
![図3.[Table]タブ画面](http://cz-cdn.shoeisha.jp/static/images/article/4900/GlassFish_5_103.gif)
![図4.[Columns]タブ画面](http://cz-cdn.shoeisha.jp/static/images/article/4900/GlassFish_5_104_s.gif)
![図5.[Apply Object Changes]画面](http://cz-cdn.shoeisha.jp/static/images/article/4900/GlassFish_5_105_s.gif)