blog

Spring Bootチュートリアル - Mybatis

1.Mybatisとは MyBatisは、カスタムSQL、ストアドプロシージャ、および高度なマッピングをサポートする優れた永続化レイヤーフレームワークです。MyBatisは、JDBCコードのほとんどす...

Mar 18, 2020 · 7 min. read
シェア

マイバティスとは何ですか?

MyBatisは、カスタムSQL、ストアドプロシージャ、および高度なマッピングをサポートする優れた永続化フレームワークです。MyBatisは、JDBCコードのほとんどすべてを排除するだけでなく、パラメータを設定し、結果セットをフェッチする作業も排除します。MyBatisは、単純なXMLまたはアノテーションを通じて、プリミティブ型、インタフェース、およびJava POJOをデータベースのレコードとして設定し、マッピングすることができます。

Spring Boot Mybatisの統合

  • 2.1 maven座標の導入

    <!--springboot -->
     <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.2.2.RELEASE</version>
     <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <dependencies>
     <!--springbootフレームワーク ウェブコンポーネント-->
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <version>2.2.2.RELEASE</version>
     </dependency>
     <!--mybatisspringbootコンポーネントを統合する-->
     <dependency>
     <groupId>org.mybatis.spring.boot</groupId>
     <artifactId>mybatis-spring-boot-starter</artifactId>
     <version>2.1.0</version>
     </dependency>
     <!--mysqlデータベース接続ドライバ-->
     <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.18</version>
     </dependency>
     <!--lombok -->
     <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.10</version>
     </dependency>
     </dependencies>
     <build>
     <!--springbootmavenプラグイン-->
     <plugins>
     <plugin>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
     <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
     <compilerArgs>
     <arg>-parameters</arg>
     </compilerArgs>
     </configuration>
     </plugin>
     </plugins>
     </build>
    
  • 2.2 コードの記述

    • 2.2.1 図のようなディレクトリ構造の作成

      コンパイル後にmybatisマッピング・ファイルとインターフェース・ファイルが同じディレクトリになるように、2つのマッパー・ファイルのパスは同じでなければならないことを覚えておいてください。

    • 2.2.2 コードの記述

      • 2.2.2.1 設定ファイルの作成とクラスの開始

        application.yml を参照してください:

        butterflytri:
         databaseurl-port: .1:3306 # データベースポート
         database-name: student_db # データベース名
        server:
         port: 8080 # アプリケーション・ポート
         servlet:
         context-path: /butterflytri # アプリケーションマッピング
        spring:
         application:
         name: mybatis # アプリケーション名
         datasource:
         url: jdbc:mysql://${butterflytri.databaseurl-port}/${butterflytri.database-name}?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
         driver-class-name: com.mysql.jdbc.Driver
         username: root
         password: root
        mybatis:
         type-aliases-package: com.butterflytri.entity # entity 
         mapper-locations: classpath:com/butterflytri/mapper/*Mapper.xml # mapperマッピング・パッケージ・スキャン
        

        MybatisApplication.java打ち上げクラス:

        package org.butterflytri;
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        /**
         * 
         * @date: 
         * @description: MybatisApplication
         */
        @SpringBootApplication
        public class MybatisApplication {
         public static void main(String[] args) {
         SpringApplication.run(MybatisApplication.class,args);
         }
        }
        
      • 2.2.2.2 エンティティクラスStudentの作成

        エンティティパッケージの下に Student.java エンティティクラスを作成します。

        package org.butterflytri.entity;
        import lombok.Getter;
        import lombok.Setter;
        import lombok.ToString;
        import java.io.Serializable;
        /**
         * 
         * @date: 
         * @description: Student
         */
        @ToString
        @Getter
        @Setter
        public class Student implements Serializable {
         private Long id;
         private String studentName;
         private String studentNo;
         private String sex;
         private Integer age;
        }
        
      • 2.2.2.3 mybatis インタフェース・ファイルの記述

        マッパーパッケージの下にStudentMapper.javaインターフェイスを作成します。

        package org.butterflytri.mapper;
        import org.apache.ibatis.annotations.Mapper;
        import org.butterflytri.entity.Student;
        import java.util.List;
        /**
         * 
         * @date: 
         * @description:
         */
        @Mapper
        public interface StudentMapper {
         /**
         * 全生徒情報を照会する
         * @return List<Student>
         */
         List<Student> findAll();
         /**
         * IDで学生情報を照会する
         * @param id
         * @return Student
         */
         Student findOne(Long id);
         /**
         * 学生番号から学生情報を照会する
         * @param studentNo
         * @return Student
         */
         Student findByStudentNo(String studentNo);
        }
        
      • 2.2.2.4 mybatis マッピングファイルの作成

        マッパーパッケージの下にStudentMapper.xmlを作成してください。

        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://.//--.td">
        <mapper namespace="org.butterflytri.mapper.StudentMapper">
         <sql id="propertyMapper">
         `ID` AS id,
         `STUDENT_NAME` AS studentName,
         `STUDENT_NO` AS studentNo,
         `SEX` AS sex,
         `AGE` AS age
         </sql>
         <select id="findAll" resultType="org.butterflytri.entity.Student">
         SELECT
         <include refid="propertyMapper"></include>
         FROM
         `t_student`
         </select>
         <select id="findOne" parameterType="java.lang.Long" resultType="org.butterflytri.entity.Student">
         SELECT
         <include refid="propertyMapper"></include>
         FROM
         `t_student`
         WHERE
         `ID` = #{id}
         </select>
         <select id="findByStudentNo" parameterType="java.lang.String" resultType="org.butterflytri.entity.Student">
         SELECT
         <include refid="propertyMapper"></include>
         FROM
         `t_student`
         WHERE
         `STUDENT_NO` = #{studentNo}
         </select>
        </mapper>
        
      • 2.2.2.5 サービス層

        StudentService.java:

        package org.butterflytri.service;
        import org.butterflytri.entity.Student;
        import java.util.List;
        /**
         * 
         * @date: 
         * @description: StudentService
         */
        public interface StudentService {
         public List<Student> findAll();
         public Student findOne(Long id);
         public Student findByStudentNo(String studentNo);
        }
        

        StudentServiceImpl.java::

        package org.butterflytri.service.impl;
        import org.butterflytri.entity.Student;
        import org.butterflytri.mapper.StudentMapper;
        import org.butterflytri.service.StudentService;
        import org.springframework.stereotype.Service;
        import javax.annotation.Resource;
        import java.util.List;
        /**
         * 
         * @date: 
         * @description: StudentServiceImpl
         */
        @Service
        public class StudentServiceImpl implements StudentService {
         @Resource
         private StudentMapper studentMapper;
         @Override
         public List<Student> findAll() {
         return studentMapper.findAll();
         }
         @Override
         public Student findOne(Long id) {
         return studentMapper.findOne(id);
         }
         @Override
         public Student findByStudentNo(String studentNo) {
         return studentMapper.findByStudentNo(studentNo);
         }
        }
        
      • 2.2.2.6 コントローラ層

        StudentController.javacontroller パッケージの下に controller クラスを作成します。

        package org.butterflytri.controller;
        import org.butterflytri.entity.Student;
        import org.butterflytri.service.StudentService;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RestController;
        import javax.annotation.Resource;
        import java.util.List;
        /**
         * 
         * @date: 
         * @description: StudentController
         */
        @RestController
        @RequestMapping("/student")
        public class StudentController {
         @Resource
         private StudentService studentService;
         @RequestMapping("/findAll")
         public List<Student> findAll() {
         return studentService.findAll();
         }
         @RequestMapping("/findOne")
         public Student findOne(Long id) {
         return studentService.findOne(id);
         }
         @RequestMapping("/findByStudentNo")
         public Student findByStudentNo(String studentNo) {
         return studentService.findByStudentNo(studentNo);
         }
        }
        
Read next

LeetCode201.ビットによる数値の範囲。

データが大きいとタイムアウトします。\n\nビットですべての数を行うには、0ビットの数がある限り、ビットの結果を持つ最後のビットは0でなければならないことに注意してください。\n\n\nビット和の結果は、すべての数値の2進数の共通接頭辞であり、下位ビットはすべて0であることがわかります。

Mar 18, 2020 · 2 min read