はじめに
このプロジェクトでは、MyBatis を使ってデータベースからコース情報を取得し、その結果をカスタム Java オブジェクトにマッピングする方法を学びます。また、データベーステーブル構造とエンティティクラスのプロパティの間の不一致を処理する方法も学びます。
👀 プレビュー


🎯 タスク
このプロジェクトでは、以下のことを学びます。
- エンティティクラスのプロパティとメソッドを変更して、データベーステーブル構造に一致させる方法。
- コース情報を照会するメソッドを定義するためにマッパーインターフェイスを構成する方法。
- SQL クエリと結果マッピングを定義するためにマッパーXML ファイルを構成する方法。
- マッパーの機能を検証するためのテストケースを実装する方法。
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- MyBatis を使ってデータベースとやり取りし、データを取得する。
resultMapを使って、データベーステーブル構造とエンティティクラスのプロパティの間の不一致を処理する。- MyBatis マッパーの機能を検証するためのテストケースを書く。
エンティティクラスを変更する
このステップでは、Course クラスのプロパティとメソッドをデータベーステーブル構造に合わせる方法を学びます。
/org/lanqiao/pojoディレクトリにあるCourse.javaファイルを開きます。- プロパティの
cNo、cName、teacherをそれぞれid、name、lecturerに変更します。 - 新しいプロパティ名に合わせて、getter と setter メソッドを変更します。
Course.javaファイルに変更を保存します。
package org.lanqiao.pojo;
/**
* Course クラスを定義する
* @author lanqiao
*/
public class Course {
// コース番号を id に変更する
private int id;
// コース名を name に変更する
private String name;
// 講師を lecturer に変更する
private String lecturer;
public Course() {
}
public Course(int id, String name, String lecturer) {
this.id = id;
this.name = name;
this.lecturer = lecturer;
}
// getter と setter メソッド名を変更する
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLecturer() {
return lecturer;
}
public void setLecturer(String lecturer) {
this.lecturer = lecturer;
}
@Override
public String toString() {
return "Course ID: " + this.id + "\tCourse Name: " + this.name + "\tLecturer: " + this.lecturer;
}
}
マッパーインターフェイスを構成する
このステップでは、コース情報を照会するメソッドを定義するために CourseMapper インターフェイスをどのように構成するかを学びます。
/org/lanqiao/mapperディレクトリにあるCourseMapper.javaファイルを開きます。- インターフェイスを変更して、以下のメソッドを追加します。
selectAllCourses():すべてのコース情報を取得します。selectCourseById(int id):指定されたコース ID のコース情報を取得します。
package org.lanqiao.mapper;
import java.util.List;
import java.util.Map;
import org.lanqiao.pojo.Course;
public interface CourseMapper {
List<Course> selectAllCourses();
Map<String, Object> selectCourseById(int id);
}
マッパーXML ファイルを構成する
このステップでは、SQL クエリと結果マッピングを定義するために CourseMapper.xml ファイルをどのように構成するかを学びます。
- プロジェクトのルートディレクトリにある
CourseMapper.xmlファイルを開きます。 resultMapを定義して、データベーステーブルの列とCourseクラスのプロパティの間のマッピングを指定します。CourseMapperインターフェイスのメソッド用の SQL クエリを定義します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.lanqiao.mapper.CourseMapper">
<!-- resultMap の定義 -->
<resultMap id="courseResultMap" type="org.lanqiao.pojo.Course">
<id property="id" column="cNo"/>
<result property="name" column="cName"/>
<result property="lecturer" column="teacher"/>
</resultMap>
<!-- すべてのコース情報を照会する -->
<select id="selectAllCourses" resultMap="courseResultMap">
SELECT * FROM course;
</select>
<!-- コース番号 2 のコース情報を照会する -->
<select id="selectCourseById" resultType="java.util.HashMap">
SELECT * FROM course WHERE cNo = #{id};
</select>
</mapper>
テストケースを実装する
このステップでは、CourseMapper の機能を検証するためのテストケースをどのように実装するかを学びます。
/org/lanqiao/testディレクトリにあるMyBatisTest.javaファイルを開きます。testSelectAllCourses()メソッドを実装して、すべてのコース情報を取得して表示します。testSelectCourseById()メソッドを実装して、コース番号 2 のコース情報を取得してHashMapに結果を格納します。
package org.lanqiao.test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.lanqiao.mapper.CourseMapper;
import org.lanqiao.pojo.Course;
public class MyBatisTest {
SqlSessionFactory sessionFactory = null;
SqlSession session = null;
@Before
public void before() throws IOException{
String resource = "mybatis-config.xml";
// MyBatis の設定ファイルを読み込む
Reader reader = Resources.getResourceAsReader(resource);
// SqlSessionFactory を作成する
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
// SQL マッピングファイル内の SQL 文を実行できる SqlSession オブジェクトを作成する
session = sessionFactory.openSession();
}
@Test
public void testSelectAllCourses() throws IOException{
// session 内の getMapper() メソッドを呼び出してインターフェイスオブジェクトを返す
CourseMapper cMapper = session.getMapper(CourseMapper.class);
// クエリを実行してすべての Course オブジェクトを返す
List<Course> courses = cMapper.selectAllCourses();
System.out.println(courses);
session.close();
}
@Test
public void testSelectCourseById() {
// CourseMapper のインスタンスを取得する
CourseMapper mapper = session.getMapper(CourseMapper.class);
// コース番号 2 のコースの情報を照会するメソッドを呼び出す
Map<String, Object> course = mapper.selectCourseById(2);
// 照会結果を出力する
System.out.println(course);
}
}
これらの手順に従うことで、エンティティクラスを成功裏に変更し、マッパーインターフェイスと XML ファイルを構成し、MyBatis を使ってコース情報を取得するためのテストケースを実装しました。
実行
最後に、次のコマンドを使ってターミナルでコードをコンパイルして実行し、Maven を使ってテストファイルを確認できます。
cd MyBatisCourseDemo03
mvn test
実行結果は以下のようになります。


まとめ
おめでとうございます!このプロジェクトを完了しました。実力を向上させるために、LabEx でさらに多くの実験を行って練習してください。



