2. Javaプロジェクト構造

1. Mavenマルチモジュール構造

BaiZe FrameworkはMavenマルチモジュール管理を採用しています。主なモジュールは以下の通りです:

baize-framework/
├── baize-base/          # ベースモジュール(共通コンポーネント、サポート機能)
└── baize-admin/         # 管理バックエンドモジュール(業務機能)

1.1 baize-base モジュール

パス:baize-backend/baiZe-base/

共通インフラストラクチャとツールクラスを提供します:

common/ - 共通コンポーネント

  • code/ - エラーコード定義(ErrorCode、SystemErrorCode、UserErrorCode)
  • domain/ - 共通ドメインオブジェクト(PageResult、ResponseDTO、RequestUser等)
  • util/ - ツールクラス(Smartプレフィックスのツール群)
  • swagger/ - Swagger/OpenAPI 設定とカスタマイズ
  • validator/ - カスタムバリデータ
  • enumeration/ - 列挙定義
  • json/ - JSONシリアライズ設定
  • annotation/ - カスタムアノテーション
  • exception/ - 例外クラス(BusinessException)
  • constant/ - 定数定義

config/ - 設定クラス

データベース、Redis、キャッシュ、Swagger、Token等の設定

handler/ - ハンドラー

  • GlobalExceptionHandler - グローバル例外処理
  • MybatisPlusFillHandler - MyBatis-Plus 自動充填

module/support/ - サポート機能モジュール

20以上のサブモジュールが含まれています:

  • codegenerator/ - コード生成器
  • redis/ - Redisカプセル化
  • cache/ - キャッシュ管理
  • file/ - ファイルアップロード
  • securityprotect/ - セキュリティ保護
  • datatracer/ - データトレース
  • repeatsubmit/ - 重複送信防止
  • captcha/ - キャプチャ
  • message/ - メッセージ管理
  • job/ - 定時タスク(SmartJob 自社開発)
  • operatelog/ - 操作ログ
  • loginlog/ - ログインログ
  • dict/ - データ辞書
  • helpdoc/ - ヘルプドキュメント
  • feedback/ - フィードバック
  • config/ - 設定管理
  • heartbeat/ - ハートビート
  • serialnumber/ - シリアル番号
  • table/ - テーブル構造管理
  • changelog/ - 変更ログ
  • datamasking/ - データマスキング
  • reload/ - ホットリロード
  • mail/ - メール
  • apiencrypt/ - API暗号化

1.2 baize-admin モジュール

パス:baize-backend/baiZe-admin/

業務管理モジュールで、baiZe-baseに依存しています:

module/system/ - システム管理モジュール

  • employee/ - 従業員管理
  • department/ - 部門管理
  • role/ - ロール管理
  • menu/ - メニュー管理
  • position/ - 役職管理
  • login/ - ログイン認証
  • message/ - メッセージ管理
  • datascope/ - データ権限

module/business/ - ビジネスモジュール

  • category/ - カテゴリ管理
  • goods/ - 商品管理
  • oa/ - OA関連

2. レイヤアーキテクチャ

各業務モジュール(例:employee)は標準的なレイヤ構造を採用しています:

module/
├── controller/     - コントローラ層、HTTPリクエスト処理
├── service/        - サービス層、ビジネスロジック編成
├── manager/        - マネージャ層、ServiceImplを継承、複雑なビジネス・複数テーブル操作
├── dao/            - データアクセス層、BaseMapperを継承
└── domain/
    ├── entity/     - エンティティクラス、データベーステーブルに対応
    ├── form/       - フォームオブジェクト、リクエストパラメータ受信(AddForm、UpdateForm、QueryForm)
    └── vo/         - ビューオブジェクト、レスポンスデータ返信

重要ポイント:

  • dao層はMyBatis-PlusのBaseMapperを使用、@Mapperアノテーション使用
  • manager層はServiceImpl<Dao, Entity>を継承、複数テーブル操作の複雑なビジネス処理用
  • service層はmanagerとdaoを注入、ビジネスロジックを編成
  • Mapper XMLファイルはsrc/main/resources/mapper/ディレクトリ配置

3. 技術スタック

  • フレームワーク: Spring Boot 2.7.18
  • Java: JDK 1.8
  • ORM: MyBatis-Plus 3.5.12
  • データベース: MySQL(P6SpyでSQL監視)
  • キャッシュ: Redis + Caffeine
  • 権限認証: Sa-Token 1.44.0
  • APIドキュメント: Knife4j 4.5.0 + Springdoc OpenAPI
  • タスクスケジューリング: SmartJob(自社開発定時タスク)
  • ツールライブラリ: Hutool、Guava、Apache Commons
  • Excel: FastExcel + POI

4. 設定ファイル

4.1 環境設定

プロジェクトはMaven Profileでマルチ環境設定を管理:

  • dev/ - 開発環境(デフォルト)
  • test/ - テスト環境
  • pre/ - プレリリース環境
  • prod/ - 本番環境

4.2 設定ファイル階層

  1. baiZe-base/src/main/resources/${profile}/baiZe-base.yaml - 基本設定(データベース、Redis、Sa-Token等)
  2. baiZe-admin/src/main/resources/${profile}/application.yaml - モジュール設定(ポート、ログ等)
    • baiZe-base.yamlの設定を上書き可能
    • YamlProcessorクラスで設定マージを実現

4.3 主要設定

  • ポート: 1024(dev環境)
  • データベース: P6Spyドライバ使用、SQLがログに出力
  • ログディレクトリ: project.log-directory設定で指定
  • ファイルアップロード: localとcloud(OSS)2モードサポート
  • Swagger/Knife4j: デフォルト有効、/doc.htmlでアクセス

5. プロジェクトの依存関係

baiZe-base(ベースモジュール)
├── common/
├── config/
├── handler/
├── listener/
└── module/support/
    ├── codegenerator/  - コード生成
    ├── redis/
    ├── cache/
    └── ...(20+のサポートモジュール)

baiZe-admin(管理バックエンド)
├── module/system/       - システム管理
│   ├── employee/        - 従業員管理
│   ├── department/      - 部門管理
│   ├── role/            - ロール管理
│   └── menu/            - メニュー管理
└── module/business/     - ビジネスモジュール
    ├── category/        - カテゴリ管理
    ├── goods/           - 商品管理
    └── oa/              - OA関連

6. 起動エントリ

メインクラス:com.baize.admin.AdminApplication

特徴:

  • スキャンパス:com.baize
  • @MapperScanでMapperインターフェースをスキャン
  • LogVariableListenerとIp2RegionListenerの2つのリスナーを登録

7. データベース規約

  • MyBatis-Plus使用、エンティティクラスは@TableNameでテーブル名指定
  • 主キーは@Id(type = IdType.AUTO)を統一使用
  • 論理削除フィールド:deletedFlag(Boolean)
  • 基本フィールド:createTime、updateTime、createUserId、updateUserId