マイバティスとは何ですか?
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.java
controller パッケージの下に 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); } }