Spring BootとMyBatis-Plusを活用した効率的なデータ操作手法

現代のWebアプリケーション開発において、効率的なデータアクセス層の実装は不可欠です。Spring BootとMyBatis-Plusの組み合わせは、開発生産性とシステム安定性を両立させる強力なソリューションです。

Spring Bootの主要機能 依存関係に基づく自動設定機能は、プロジェクト構成を大幅に簡素化します。組み込みTomcat/Jettyサーバーにより、外部アプリケーションサーバーの依存を排除可能です。スターターディペンデンシーを通じたMaven設定の最適化、Actuatorを活用した実行時モニタリング、外部設定ファイルによる環境依存設定の分離など、開発フローを一貫して支援します。

MyBatis-Plusの強化ポイント Active Recordパターンのサポートにより、オブジェクト指向的なデータ操作が可能になります。データベーススキーマから自動生成されるエンティティクラスやMapperインターフェースは、手作業によるコーディングを削減します。物理・論理分頁機能やSQL性能解析ツール、グローバル設定による共通ルールの適用など、データ層開発の生産性を飛躍的に向上させます。

プロジェクト構築の実践例 Mavenプロジェクトの初期化には、Spring Initializrを利用した標準的手法が推奨されます。依存関係として「Spring Web」と「MyBatis-Plus」を追加し、基本構造を生成します。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version>
    </dependency>
</dependencies>

設定ファイルの最適化 YAML形式の設定ファイルでは、明確な階層構造を活用します。例えばデータベース接続設定は以下のように記述されます。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/sample_db
    username: root
    password: securepass
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true

プロパティファイルを使用する場合、同様の設定を次のように表現します。

spring.datasource.url=jdbc:mysql://localhost:3306/sample_db
spring.datasource.username=root
spring.datasource.password=securepass
mybatis-plus.configuration.map-underscore-to-camel-case=true

データベース接続プールの実装 従来のJDBC接続方式では、毎回新しい接続を生成するためリソース消費が激しくなります。Druid接続プールを導入することで、接続の再利用と監視機能を実現します。pom.xmlに追加する依存関係は以下の通りです。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.16</version>
</dependency>

YAML設定例:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20

MyBatis-Plusの基本実装 エンティティクラスとMapperインターフェースの実装例です。

package example.data.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

@Data
public class Member {
    @TableId(type = IdType.AUTO)
    private Long userId;
    private String loginId;
    private String password;
    private String phoneNumber;
    private Double balance;
}
package example.data.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import example.data.entity.Member;

public interface MemberRepository extends BaseMapper<Member> {
}

単体テストでは、基本CRUD操作を確認できます。

package example.data.mapper;

import example.data.entity.Member;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDateTime;

@SpringBootTest
class MemberRepositoryTest {
    @Autowired
    private MemberRepository memberRepository;

    @Test
    void saveNewMember() {
        Member member = new Member();
        member.setLoginId("taro_yamada");
        member.setPassword("secure_password_123");
        member.setPhoneNumber("09012345678");
        member.setBalance(15000.0);
        member.setCreatedAt(LocalDateTime.now());
        memberRepository.insert(member);
    }
}

多環境設定の実装 開発環境と本番環境を分離するため、プロファイル別設定ファイルを作成します。

application-dev.yml:

spring:
  datasource:
    url: jdbc:mysql://dev-db:3306/dev_db

application-prod.yml:

spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/prod_db

起動時にプロファイルを指定します。

java -jar app.jar --spring.profiles.active=prod

コード生成ツールの活用 MyBatis-Plusのコードジェネレーターを用いて、データベーススキーマから一括生成が可能です。

public class CodeGenerator {
    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator();
        generator.setGlobalConfig(new GlobalConfig()
            .setOutputDir(System.getProperty("user.dir") + "/src/main/java")
            .setAuthor("System")
            .setOpen(false));
        // データソース設定など他の設定を追加
        generator.execute();
    }
}

このツールにより、エンティティ、Mapper、サービス層クラスを自動生成し、開発効率を最大化できます。

タグ: spring-boot MyBatis-Plus Druid database-connection-pool yaml-configuration

5月22日 08:33 投稿