MyBatis-Plusの基本的な使用方法と実装例

1.開発環境

  • IDE: IntelliJ IDEA 2021.2
  • JDK:JDK11
  • ビルドツール: Maven 3.8.1
  • MySQLバージョン: MySQL 8.0
  • Spring Boot:2.7.5
  • MyBatis-Plus:3.5.3

2.データベースとテーブルの作成

テーブルの作成とデータの挿入

CREATE DATABASE `mybatis_plus_example` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; 
USE `mybatis_plus_example`;

CREATE TABLE `employee` (
  `id` bigint(20) NOT NULL COMMENT '主キーID',
  `full_name` varchar(50) DEFAULT NULL COMMENT '氏名',
  `department` varchar(30) DEFAULT NULL COMMENT '部署',
  `position` varchar(30) DEFAULT NULL COMMENT '役職',
  `salary` decimal(10,2) DEFAULT NULL COMMENT '給与',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO employee (id, full_name, department, position, salary) VALUES
(1, '田中太郎', '開発部', 'エンジニア', 500000.00),
(2, '佐藤花子', '営業部', '営業担当', 450000.00),
(3, '鈴木一郎', '人事部', '人事担当', 480000.00),
(4, '高橋美咲', '経理部', '経理担当', 420000.00),
(5, '伊藤健司', '開発部', 'リードエンジニア', 600000.00);

3.Spring Bootプロジェクトの作成

Spring Bootプロジェクトの作成とLombokプラグインのインストール

プロジェクトのディレクトリ構造は以下の通りです:

MavenプロジェクトをSpring Bootプロジェクトに変更するだけで、通常のMavenプロジェクトのpom.xmlファイルを修正する必要があります:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
    </parent>
    
    <groupId>com.example</groupId>
    <artifactId>MyBatisPlusDemo</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

4.コードの実装

application.ymlの設定

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus_example?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Tokyo
    username: root
    password: password123
  jpa:
    hibernate:
      ddl-auto: none

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

注意:

  1. ドライバークラス(driver-class-name)
    • Spring Boot 2.1以降(組み込みjdbc8ドライバー)では、ドライバークラスとして使用: driver-class-name: com.mysql.cj.jdbc.Driver
    • それ以外の場合、テスト実行時にWARNメッセージが表示される可能性があります
  2. 接続URL(url)
    • MySQL 8.0のURL: jdbc:mysql://localhost:3306/mybatis_plus_example?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Tokyo
    • そうしないと、テスト実行時に以下のエラーが報告される可能性があります: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more

起動クラスの作成

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

エンティティの追加

package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("employee")
public class Employee {
    private Long id;
    private String fullName;
    private String department;
    private String position;
    private Double salary;
}

Mapperの追加

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.Employee;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeMapper extends BaseMapper<Employee> {
}

テストの実行

package com.example.demo;

import com.example.demo.entity.Employee;
import com.example.demo.mapper.EmployeeMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class EmployeeServiceTest {
    @Autowired
    private EmployeeMapper employeeMapper;

    @Test
    public void testFindAllEmployees() {
        List<Employee> employees = employeeMapper.selectList(null);
        employees.forEach(System.out::println);
    }

    @Test
    public void testFindEmployeeById() {
        Employee employee = employeeMapper.selectById(2L);
        System.out.println("ID 2の従業員: " + employee);
    }
}

結果:

これらのログ情報の出力は、ymlファイルで以下のように設定されています:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

もちろん、ログ情報からSQLステートメントなども確認できます。

タグ: MyBatis-Plus Spring Boot Java MySQL Maven

5月17日 08:39 投稿