システム開発でよく使用するmavenマルチモジュールプロジェクトの構成サンプルを説明します。
構成方針
- 複数のサブシステムをもつシステム開発を想定しています。システム名はzzz、サブシステムはf10, f20等のサブシステムIDが割り当てられているものとして、各種のネーミングを決定しています。
- このシステムでは、DB操作にはmybatisを使用する想定です。各テーブルに対する基本操作を行うためのmybatis用のクラス群を作成するためにmybatis-generatorを使用します。システム固有の要件・仕様を満たせるよう、既知や独自プラグインを使ってmybatis-generatorの出力をカスタマイズします。
- 開発環境としてEclipse Java EE IDE for Web Developers(Photon 4.8.0), Java8, mybatis-generator-maven-plugin 1.4.0を使用します。参照先DBはmariadb 5.5.64(JDBCドライバはmariadb-java-client 2.5.2)を使用します。
- サンプルのコードはGitHubに公開しています。
※現状、maven, mybatis, mybatis-generatorの検証が目的のため、web/batchのサンプルは実質空になっています。GitHubContribute to nextdoorwith/example-maven-mybatis development…
モジュール構成
プロジェクトのモジュール構成は次の通りです。
zzzシステム全体で共通するものはzzz-common-*というプロジェクト群、サブシステム固有のものは例えばf10の場合はzzz-f10-*というプロジェクト群で構成しています。
システム全体、サブシステム内で共通のプロパティや依存関係を定義するために、zzz-parent, zzz-f10-parent等の親プロジェクトを設けています。
zzz-common-*ではシステム共通のクラス群を格納します。システム全体で共通に使用するクラスやリソース群をzzz-commonに格納しています。mybatis-generator関連のクラスやプロパティ等はzzz-common-mbgに格納します。
各サブシステムの場合、Webアプリとバッチプロジェクト、これらで共通のクラス群を格納するプロジェクトを想定しています。例えば、f10サブシステムの場合、それぞれzzz-f10-web, zzz-f10-batch, zzz-f10-commonとなります。
プロジェクト依存関係
プロジェクトの依存関係は次の通りです。
zzz-common-mbgは依存関係を持つプロジェクト/ライブラリというよりは、システム共通のツールの位置づけのプロジェクトになっています。mybatis-generatorの設定ファイルを切り替えて実行することで、各サブシステム用のmybatis関連クラス・ファイルを生成し、各サブシステムのcommonプロジェクトに出力します。
JAX-RS等を使ったシステム間のデータ連携を行う場合、呼び出し側での実装を容易にするために、公開APIで使用しているEntity/DTOを使用したい場合がある。このような状況を考慮するなら、zzz-f10-domain等のEntity/DTOを格納するプロジェクトを用意することも考えられる。
データベース環境
サンプルではmariadb 5.5(CentOS7)を使用しています。
各サブシステム毎にデータベースを持っている想定であり、サブシステムf10用のデータベースとして、次の手順で構築しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | yum install mariadb-server vi /etc/my.cnf.d/server.cnf ... ↓下記を追加or更新 [mysqld] character-set-server = utf8mb4 ... systemctl restart mariadb mysql create database mybatis_example_f10 default character set utf8mb4; grant all privileges on mybatis_example_f10.* to 'appuser'@'localhost' identified by 'appuserpass'; grant all privileges on mybatis_example_f10.* to 'appuser'@'%' identified by 'appuserpass'; quit mysql -u appuser -p mybatis_example_f10 drop table if exists mst_company; create table mst_company( cid char(4) not null, name varchar(256) not null, addr varchar(1024), num_of_employee int, created_timestamp timestamp not null, created_userid varchar(128) not null, updated_timestamp timestamp null default null, updated_userid varchar(128), version int not null default 1, primary key(cid) ); drop table if exists mst_employee; create table mst_employee( cid char(4) not null, eid char(6) not null, name varbinary(256) not null, addr varchar(1024), age int, note varchar(4096), created_timestamp timestamp not null, created_userid varchar(128) not null, updated_timestamp timestamp null default null, updated_userid varchar(128), version int not null default 1, primary key(cid, eid) ); insert into mst_company value('0001','テスト会社1', '東京都新宿区', 100, now(), 'system', null, null, 1); insert into mst_employee value('0001','000001', aes_encrypt('山田太郎', sha2('pass', 512)), '埼玉県さいたま市', 20, '備考', now(), 'system', null, null, 1); select * from mst_company; select cid, eid, aes_decrypt(name, sha2('pass', 512)) as name, addr from mst_employee; quit |
関連リソース
このサンプルプロジェクトに関わるリソースは次の通りです。
- システム開発でのmybatis-generatorの利用
実際のシステム開発でmybatis-generatorを使用するためのpom.xml, generatorConfig.xmlのサンプルを説明します。mybatis-generatorの既存機能やプラグインで業務要件を満たせない場合があるため、独自プラグインを作成する前提の構成となっています。