今回はJavaのFrameworkの一つMyBatisで遊んでみます。
RDBMSとの連携において開発の効率化の為には、Hibernate のようなO/Rマッピングフレームワークを利用するのが一般的ですが 既存のSQLを利用使用しつつも、DAOやEntityの自動生成、クエリの動的生成など、ちょっとした部分だけFrameworkで代用したいということはあると思います。
そんな時は比較的簡単に利用できるSQLマッピングフレームワークとしてMyBatisが便利です。
という訳で、今回から
- 第一章 postgreSQLの導入から設定(軽め)
- 第二章 mybatis-generatorによるMapper自動生成
- 第三章 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 件のコメント:
コメントを投稿