ブログ アーカイブ

自己紹介

本ブログをご覧いただき、ありがとうございます。
株式会社ヒューマンインタラクティブテクノロジー(HIT)の技術グループ担当者です。

弊社ホームページ

2014年3月12日水曜日

MyBatisで遊んでみる(1) 第一章 postgreSQLの導入から設定(軽め)

どうも、はじめまして 技術グループのトムです。
今回はJavaのFrameworkの一つMyBatisで遊んでみます。
RDBMSとの連携において開発の効率化の為には、Hibernate のようなO/Rマッピングフレームワークを利用するのが一般的ですが 既存のSQLを利用使用しつつも、DAOやEntityの自動生成、クエリの動的生成など、ちょっとした部分だけFrameworkで代用したいということはあると思います。
そんな時は比較的簡単に利用できるSQLマッピングフレームワークとしてMyBatisが便利です。


という訳で、今回から
  • 第一章 postgreSQLの導入から設定(軽め)
  • 第二章 mybatis-generatorによるMapper自動生成
  • 第三章 MyBatis実装サンプル
の3回に分けてMyBatis実行サンプル作成までの手順を記載していきます。
今回の記事ではMyBatisで遊ぶための前準備としてデータを準備します。




第一章 postgreSQLの導入から設定(軽め)

検証に使用するDBはpostgreSQLを選択。
接続対象のDBはリモートに建てました環境は以下の通りです。

OS Windows 7 Enterprise SP1 64bit
RDBMS postgreSQL 9.3.2
FW Mybatis 3.2.5
ホストIP 192.168.100.100

1. postgreSQLのインストール


(1)ファイルダウンロード

公式サイトからインストーラー「postgresql-9.3.2-3-windows-x64.exe」をダウンロード
記事作成時点(2014/2/26)での最新バージョンは「9.3.2」でした。
※いつの間にか「9.3.3」が出ているみたいですが手順は同じだと思います。


(2)インストール

インストール手順は、ウィザードの「Next」を押していけば完了するので省略します。
collationを聞かれた場合は”C”を指定してください。
最後にアドオンツール導入のために、「Stack Builder」の起動を確認をされますが、今回は特に必要ないので、チェックを外してFinishです。

(3)設定変更(リモートホストからpostgresへ接続する為の設定)

今回はリモート環境のDBへ接続するので、「postgresql.conf」と「pg_hba.conf」を少しいじります。
デフォルトインストールの場合「C:\Program Files\PostgreSQL\9.3\data」以下配下にファイルがあります。

以下変更が必要な場合は設定値を変更する

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'    # what IP address(es) to listen on;
                          # comma-separated list of addresses;
                          # defaults to 'localhost'; use '*' for all
                          # (change requires restart)
port = 5432               # (change requires restart)
max_connections = 100     # (change requires restart)
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             postgres        192.168.100.100/32      md5
# 接続を許可するデータベース、ユーザ、アドレスの範囲を指定
# 以下の場合はtestデータベースに対してmybatisuserユーザでのアクセスを192.168.100.0~192.168.100.255からの接続にのみに許可
host    test            mybatisuser     192.168.100.0/24        md5

2. ユーザ、データベース、スキーマ、テーブル作成

以下psqlで実行します。 psqlにPATHを通しておくと便利です。
一時的にPATHを追加するには以下の通り
PATH %PATH%;C:\Program Files\PostgreSQL\9.3\bin
常用する場合は環境変数に追記してください。

(1)ユーザとロールの関連付け、及びデータベースの作成

-- スーパーユーザーでログイン
psql -U postgres

-- クエリ実行結果の表示形式変更(お好みでどうぞ)
\x
-- ユーザ・ロール作成 ※サンプルなのでパスワードは適当です
create role mybatisuser with NOSUPERUSER NOINHERIT LOGIN PASSWORD 'password';
-- データベース作成
create database test with owner mybatisuser;
-- データベース作成結果確認
\l
-[ RECORD 4 ]-----+----------------------
名前              | test
所有者            | mybatisuser
エンコーディング  | UTF8
照合順序          | C
Ctype(変換演算子) | C
アクセス権        |

(2)スキーマ、テーブルの作成とサンプルデータの投入

-- ユーザ切り替え
\c test mybatisuser

-- スキーマ作成
CREATE SCHEMA my;

-- テーブル作成
create table my.dept (
id int4,
name varchar(256) not null,
PRIMARY KEY(id)
);
create table my.emp (
id int4,
dept_id int4 not null references my.dept(id),
name varchar(256) not null,
tel varchar(12) not null,
PRIMARY KEY(id, dept_id)
);

-- テーブル確認
\d my.dept
            テーブル "my.dept"
  列  |           型           |  修飾語
------+------------------------+----------
 id   | integer                | not null
 name | character varying(256) | not null
インデックス:
    "dept_pkey" PRIMARY KEY, btree (id)
参照元:
    TABLE "my.emp" CONSTRAINT "emp_dept_id_fkey" FOREIGN KEY (dept_id) REFERENCES my.dept(id)

\d my.emp
              テーブル "my.emp"
   列    |           型           |  修飾語
---------+------------------------+----------
 id      | integer                | not null
 dept_id | integer                | not null
 name    | character varying(256) | not null
 tel     | character varying(12)  | not null
インデックス:
    "emp_pkey" PRIMARY KEY, btree (id, dept_id)
外部キー制約:
    "emp_dept_id_fkey" FOREIGN KEY (dept_id) REFERENCES my.dept(id)


-- データ挿入
insert into my.dept values
(1,'Foundation')
,(2,'Sales')
,(3,'System');

insert into my.emp values
(1,1,'Alfa','111-111-1111')
,(2,1,'Aileen','123-123-1234')
,(3,3,'Bravo','222-222-2222')
,(4,2,'Charlie','333-333-3333');


-- データ確認
select * from my.dept;
 id |    name
----+------------
  1 | Foundation
  2 | Sales
  3 | System

select * from my.emp;
 id | dept_id |  name   |     tel
----+---------+---------+--------------
  1 |       1 | Alfa    | 111-111-1111
  2 |       1 | Aileen  | 123-123-1234
  3 |       3 | Bravo   | 222-222-2222
  4 |       2 | Charlie | 333-333-3333


これで第二章のmybatis-generatorを利用するためのデータの準備が整いました。
ユーザとスキーマは作らなくてもmybatis-generatorが動くことは動くのですが、自動生成の対象スキーマやテーブルを絞らない場合information_schema、pg_catalogのカタログオブジェクトやテーブルも全て取得してしまいます。


昔は「postgresql.conf」のlisten_addressesのデフォルト値は'localhost'だったのですが、 今見るとデフォルトで全てのIPアドレスをlistenするようになっていますね。
postgresqlの設定値はバージョンによって細かい違いが出てきているようです。

0 件のコメント:

コメントを投稿