アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング JavaEE7 maven mybatis 開発標準化

mavenマルチモジュールプロジェクトの構成例

投稿日:2020年1月12日 更新日:


システム開発でよく使用する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のサンプルは実質空になっています。

モジュール構成

プロジェクトのモジュール構成は次の通りです。
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用のデータベースとして、次の手順で構築しています。

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の既存機能やプラグインで業務要件を満たせない場合があるため、独自プラグインを作成する前提の構成となっています。


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, JavaEE7, maven, mybatis, 開発標準化

執筆者:

関連記事

パスワード情報の保管方式の比較

Webアプリの開発でパスワードを使ったユーザ認証を設計・実装する機会がよくある。 後輩への説明や勉強会ネタとして、この辺の話を纏めてみようと思う。 概要 オンラインバンキングやネットショッピングのサイ …

Javaでサポートする暗号化アルゴリズム

Java暗号化アーキテクチャ Javaで暗号化処理を実装する場合、Java暗号化アーキテクチャ(Java Cryptography Architecture: JCA)と呼ばれるフレームワークを使いま …

ftp, ftps, sftpの違い

開発対象システムの連携先システムとして、ftpsやらftpsサーバが指定される場合がある。 私の場合、開発標準の役割を担う場合が多く、これらの仕様を把握し、動作確認や単体テスト用のダミーのサーバを用意 …

初心者向けの最低限のviの使い方

新入社員やUnix/Linux未経験がviで苦戦するのをよく見ます。 ネットではコマンドの説明を主とした内容が多く、このような資料を見てviを使うと、モードの違いが分からず、思ったように編集できないこ …

Windows10のインストール場所を選べない

DELLのノートPCであるVostro 5370を購入しました。 既定ではWindows 10 Homeがインストールされていましたが、会社用のボリュームライセンスのWindows10 Enterpr …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る