NDW

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

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, 開発標準化

関連記事

TeraTermを使ったSSH鍵の作成方法

WindowsでSSH接続するためのTera Termで、SSH鍵を作成する方法を説明します。 概要 Windows10(64ビット)で動作するTera Term 4.105で動作確認しました。 クラ …

ルートCA、サーバ・クライアント証明書の作成方法

概要 検証・開発環境での使用を前提とした、ルートCA証明書の作成、その証明書で署名したサーバ証明書とクライアント証明書を作成する手順を説明します。 可能な限りシンプルで簡単な条件・手順になっています。 …

ASP.NET Core: IHttpClientFactoryの単純サンプル

IHttpClientの使い方やサンプルの記事を書きましたが、後から見るとちょっと量が多いと感じました。 とりあえず動かしてみたい、概略を知りたい、急いでいる等の人向けに、もっと単純なサンプルを用意し …

SLF4Jの仕組みと使用方法

何気に使用しているSLF4Jの仕様やその仕組みを整理したいと思います。 前提 元ネタはSLF4J Manualサイトです。 2021年1月時点でSLF4Jは2.0系、1.8系、1.7系の3つがあります …

localhost(pfx)をPEM形式の証明書と鍵に変換

開発環境にて、Visual Studioのインストール時に追加されるlocalhostサーバ証明書(IIS Express Development Certificate)を、Apache httpd …