学習22日目:メッセージボード作成の前準備。

今日の学習時間。

  • Day:22
  • Today:4h
  • Total:129h

学習内容について。

今までに学んだ内容を1つに繋げてみる。今回はそのメモ。

eclipseからターミナルを呼び出せるようにする。

  1. 外部ツールの構成をクリック
  2. 「プログラム」を右クリック→「新規」
  3. 「メインタブ」に下記を手入力
    1. ロケーション:/usr/bin/open
    2. 引数:-a Terminal ${project_loc}
  4. 「共通タブ」
    1. 「お気に入りのメニューに表示」の中の「外部ツール」にチェック
  5. 「適用」ボタンをクリックして設定を保存
  6. これで「外部ツール」から最初からメッセージボードのプロジェクトのフォルダにいる状態でターミナルが開く

eclipseプロジェクトを作成していく。

動的Webプロジェクトの作成
  • ファイル→新規→動的Webプロジェクト
    • プロジェクト名:message_board
    • デフォルト・ロケーションを使用:☑︎
    • ターゲット・ランタイム:Tomcat8 (Java8)
    • 動的webモジュール バージョン:3.1
    • 構成:Tomcat8 (Java8) デフォルト構成
    • EARメンバーシップ:◻︎
    • ワーキングセット:◻︎
    • コンテキスト・ルート:(プロジェクト名そのまま)
    • コンテンツ・ディレクトリー:WebContent
    • web.xml デプロイメント記述子の生成:◻︎
.gitignoreを作成
  • 余計なファイルまでコミットしないようにするために
  • プロジェクト名を右クリック→新規→ファイルで.gitignoreを新規作成
  • 以下のコードを保存
    • JavaとMavenに関しての.gitignoreをベースに作成
# Compiled class file
*.class

# Package Files #
*.jar
*.war
*.ear

# Maven
target/

# eclipse
.classpath
.project
.settings/
build/

# OS Files
Thumbs.db
.DS_Store
  • このままではプロジェクト・エクスプローラーに表示されないので以下のように設定を変更
    • ①:プロジェクト・エクスプローラー右上にある白い▽をクリック
    • ②:ビューのカスタマイズをクリック
    • ③:「フィルター」タブにある.*リソースのチェックを外して「OK」をクリック
Gitにコミットする
$ git init
$ git add .
$ git commit -m "Initial commit"
Mavenプロジェクトへ変換
  • JDBCドライバやJSTLなどをプロジェクトに取り込むためにMavenプロジェクトへ変換
  • プロジェクトを右クリック→構成→Mavenプロジェクトへ変換
  • グループIdをjp.exampleに変更
必要な外部ライブラリをインストール

pom.xmlを開き、依存関係タブから設定を4つ追加。

JDBCドライバ
  • グループId:mysql
  • アーティファクトId:mysql-connector-java
  • バージョン:5.1.45
Hibernate
  • グループId:org.hibernate
  • アーティファクトId:hibernate-core
  • バージョン:5.2.13.Final
JSTL(1)
  • グループId:org.apache.taglibs
  • アーティファクトId:taglibs-standard-impl
  • バージョン:1.2.5
JSTL(2)
  • グループId:javax.servlet.jsp.jstl
  • アーティファクトId:javax.servlet.jsp.jstl-api
  • バージョン:1.2.1
pom.xmlをGitにコミット
$ git add .
$ git commit -m "Add pom.xml"

Tomcatの動作確認。

サーブレットを作成
  1. プロジェクト・エクスプローラーJavaリソースsrccontrollersパッケージを作成
  2. srcを右クリック→新規→「サーブレット」
  3. 下記を設定
  • Javaパッケージ:controllers
  • クラス名:IndexServlet
  • URLマッピング:/IndexServlet/indexに変更
  • doPostのチェックのみ外す
Tomcat8の設定と起動
  1. 「サーバー」タブを開く
  2. 「ローカル・ホストのTomcat8」を右クリックして「追加および除去」をクリック
  3. 使用可能の選択ボックスにあるmessage_boardを選択して「追加>」をクリック
  4. 「完了」をクリック
  5. Tomcatを起動
  6. eclipseの内部ブラウザで http://localhost:8080/message_board/index にアクセス
  7. 「Served at: /message_board」と表示されていればOK
IndexServlet.javaをGitにコミット
$ git add .
$ git commit -m "Add IndexServlet.java"

MySQLのセットアップ。

// パスワードを入力しログイン
mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11555
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

// message_boardアプリ用のデータベースを作成
mysql> CREATE DATABASE message_board DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.04 sec)

// データベースに接続するアカウントを登録
mysql> CREATE USER 'mesuser'@'localhost' IDENTIFIED BY '******';
Query OK, 0 rows affected (0.09 sec)

// さきほど登録したアカウントにINSERTやUPDATE等の実行ができる権限を付与
mysql> GRANT ALL PRIVILEGES ON message_board.* TO 'mesuser'@'localhost';
Query OK, 0 rows affected (0.01 sec)

パスワードを忘れていてログインまでに無駄な時間を食った。。

  • message_boardデータベース
  • message_boardデータベースに全権をもつmesuserアカウント(パスワード:******

Hibernateのセットアップ。

プロジェクト・エクスプローラーでmessage_boardを右クリック→構成→JPAプロジェクトへ変換。

プロジェクト・ファセット
  • Java(バージョン:1.8):☑︎
  • JPA(バージョン:2.1):☑︎
  • 動的webモジュール(バージョン:3.1):☑︎
JPAファセット
  • プラットフォーム:Generic 2.1
  • JPA実装:ライブラリー構成を無効
  • 接続:なし
  • 永続化クラス管理:注釈付きクラスを persistence.xml に記述
警告表示を消す(任意)
  1. プロジェクト・エクスプローラーでmessage_boardを右クリック
  2. プロパティー→JPA→エラー/警告
  3. プロジェクト固有の設定を可能にする:☑︎
  4. 指定された接続がないプロジェクト:無視
  5. 適応
persistence.xmlの各種設定

プロジェクト・エクスプローラーでmessage_boardJPAコンテンツpersistence.xml

一般タブ
  • 名前:message_board
  • 永続化プロバイダー:org.hibernate.jpa.HibernatePersistenceProvider
接続タブ

トランザクション・タイプ:リソース・ローカルに変更

JDBC接続プロパティー
  • ドライバー:com.mysql.jdbc.Driver
  • URL:jdbc:mysql://localhost/message_board?useSSL=false&useUnicode=true&characterEncoding=utf8
  • ユーザー:mesuser
  • パスワード:******
スキーマ生成タブ
  • Database action:作成
  • Scripts generation:デフォルト(なし)
プロパティータブに追加
  • hibernate.dialect:org.hibernate.dialect.MySQL5Dialect
  • hibernate.show_sql:true
  • hibernate.format_sql:true

最後に忘れず保存。

DTOの作成。

カラム名用途データ型補足
idメッセージID数値型自動採番
titleメッセージのタイトル文字列型必須入力
contentメッセージの内容文字列型必須入力
created_at作成日時日時型必須入力
updated_at更新日時日時型必須入力
それぞれのカラムの意味
  • Message クラスの内容を保存するとエラーが表示される
  • 解決策
    • persistence.xmlを再度開く
    • 一般タブの右側にある「管理クラス」にMessage - modelsを追加

DAOの作成。

DAOに相当するDBUtilクラスをutilsパッケージ(新規で用意)の中に作成する。

package utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class DBUtil {
    private static final String PERSISTENCE_UNIT_NAME = "message_board";
    private static EntityManagerFactory emf;

    public static EntityManager createEntityManager() {
        return _getEntityManagerFactory().createEntityManager();
    }

    private static EntityManagerFactory _getEntityManagerFactory() {
        if (emf == null) {
            emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        }

        return emf;
    }
}
ここまで作成したデータベース関連のファイルをGitにコミット
$ git add .
$ git commit -m "Add database files"

※本来persistence.xmlにはMySQL のユーザ名・パスワードが記載されているのでGit管理の対象にするべきファイルではない。

今日の反省と明日の目標。

メッセージボードを作っていくのですが、コードを書き始める前にする準備が多いです。この作業は基本的なものなので自動的にスイスイできるようになりたいところ。結構、忘れてることが多かったのでその都度、自分の書いた記事を読み返して進めていきました。やはり、ブログをやってて良かったと思います。特にHibernateの存在意義がよくわからなかったので集中的に復習しました。簡単に言うとO/Rマッピングでインピーダンス・ミスマッチを解消するためのものです。

さて、3日前に首を寝違えてしまい、今日もその痛みと戦って参りましたが、だいぶ治ってきました。明日の朝には完全回復してると思うので、明日はジムにも行かず、プログラミングにフルコミットしていこうかなと思います。

閉じる