MyBatis を使ったコーススケジュールの CRUD 操作

JavaScriptBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、人気のある Java 永続化フレームワークである MyBatis を使用して、コーススケジュールテーブルに対して CRUD(作成、読み取り、更新、削除)操作を行う方法を学びます。

👀 プレビュー

コーススケジュールテーブルのプレビュー

コーススケジュールテーブルのプレビュー

🎯 タスク

このプロジェクトでは、以下を学びます。

  • プロジェクトを構成し、必要な依存関係を設定する方法
  • プロパティ、コンストラクタ、セッター/ゲッターメソッドなどを追加することで、Courseエンティティクラスを改善する方法
  • MyBatis の設定ファイルmybatis-config.xmlを改善する方法
  • CourseMapperインターフェイスとその対応するメソッドを実装する方法
  • CourseMapper.xmlファイルで SQL マッピングを実装する方法
  • MyBatisTest.javaファイルでテストケースを実装する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • MyBatis を使用して MySQL データベースとやり取りする
  • エンティティクラスを定義し、MyBatis のマッピングファイルを構成する
  • MyBatis を使用して CRUD 操作を実装する
  • アプリケーションの機能を検証するための単体テストを書く

プロジェクトを設定する

このステップでは、プロジェクトを構成し、必要な依存関係を設定する方法を学びます。

  1. MyBatisCourseDemo02 プロジェクト内の pom.xml ファイルを開きます。
  2. <dependencies> セクションに以下の依存関係を追加します。
<!-- MyBatis jar -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

    <!-- MySQLデータベースドライバーjar -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>
  1. 文字コードと JDK バージョンを設定するために、<properties> セクションに以下のプロパティを追加します。
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  1. XML マッピングファイルをクラスパスに含めるために、以下の <build> セクションを追加します。
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

エンティティクラスを改善する

このステップでは、プロパティ、コンストラクタ、セッター/ゲッターメソッドなどを追加することで、Course エンティティクラスを改善します。

  1. /src/main/java/org/labex/pojo ディレクトリ内の Course.java ファイルを開きます。
  2. Course クラスに以下のプロパティを追加します。
    private int cNo;
    private String cName;
    private String teacher;
  1. 以下のコンストラクタを追加します。
    public Course() {

    }

    public Course(int cNo, String cName, String teacher) {
        this.cNo = cNo;
        this.cName = cName;
        this.teacher = teacher;
    }
  1. 以下のゲッターとセッターメソッドを追加します。
    public int getCNo() {
        return cNo;
    }

    public void setCNo(int cNo) {
        this.cNo = cNo;
    }

    public String getCName() {
        return cName;
    }

    public void setCName(String cName) {
        this.cName = cName;
    }

    public String getTeacher() {
        return teacher;
    }

    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }
  1. 以下の toString() メソッドを追加します。
    @Override
    public String toString() {
        return "Course number: " + this.cNo + "\tCourse name: " + this.cName + "\tTeacher: " + this.teacher;
    }

MyBatis の設定を改善する

このステップでは、MyBatis の設定ファイルmybatis-config.xmlを改善します。

  1. src/main/resourcesディレクトリ内のmybatis-config.xmlファイルを開きます。
  2. エンティティクラスのエイリアスを定義するために、以下の<typeAliases>セクションを追加します。
    <typeAliases>
        <package name="org.labex.pojo"/>
    </typeAliases>
  1. <environments>セクションでデータソース環境を設定します。
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}" />
                <property name="url" value="${mysql.url}" />
                <property name="username" value="${mysql.username}" />
                <property name="password" value="${mysql.password}" />
            </dataSource>
        </environment>
    </environments>
  1. <mappers>セクションで SQL マッピングファイルCourseMapper.xmlを登録します。
    <mappers>
        <package name="org.labex.mapper" />
    </mappers>

CourseMapper インターフェイスを実装する

このステップでは、CourseMapperインターフェイスとその対応するメソッドを実装します。

  1. org.labex.mapperパッケージ内のCourseMapper.javaファイルを開きます。
  2. 以下のメソッドをCourseMapperインターフェイスに追加します。
import java.util.List;

import org.labex.pojo.Course;

public interface CourseMapper {

    /**
     * すべてのコース情報を照会する
     */
    public List<Course> queryAllCourse();

    /**
     * 新しいコースを挿入する
     * @param course
     */
    public int insertCourse(Course course);

    /**
     * コース情報を更新する
     * @param course
     */
    public int updateCourse(Course course);

    /**
     * コース番号に基づいてコース情報を削除する
     * @param course
     */
    public int deleteCourse(int cNo);
}

SQL マッピングを実装する

このステップでは、CourseMapper.xmlファイルにおいて SQL マッピングを実装します。

  1. src/main/java/org/labex/mapperディレクトリ内のCourseMapper.xmlファイルを開きます。
  2. 以下の SQL マッピングステートメントを追加します。
    <!-- すべてのコース情報を取得する -->
    <select id="queryAllCourse" resultType="org.labex.pojo.Course">
        select * from course
    </select>

    <!-- 新しいコースを挿入する -->
    <insert id="insertCourse" parameterType="org.labex.pojo.Course">
        insert into course(cNo,cName,teacher)
        values(#{cNo},#{cName},#{teacher})
    </insert>

    <!-- コース番号に基づいてコース情報を更新する -->
    <update id="updateCourse" parameterType="org.labex.pojo.Course">
        update course set cName=#{cName},teacher=#{teacher}
        where cNo=#{cNo}
    </update>

    <!-- コース番号に基づいてコース情報を削除する -->
    <delete id="deleteCourse" parameterType="int">
        delete from course where cNo=#{cNo}
    </delete>

テストケースを実装する

このステップでは、MyBatisTest.javaファイルにおいてテストケースを実装します。

  1. /src/test/java/org/labex/testディレクトリ内のMyBatisTest.javaファイルを開きます。
  2. 以下のテストメソッドを追加します。
import java.io.IOException;
import java.io.Reader;
import java.util.List;

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.labex.mapper.CourseMapper;
import org.labex.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 testSel() throws IOException{
        // session 内の getMapper() メソッドを呼び出してインターフェイスオブジェクトを返す
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // クエリを実行してすべての Course オブジェクトを返す
        List<Course> courses = cMapper.queryAllCourse();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testIns() throws IOException{
        // session 内の getMapper() メソッドを呼び出してインターフェイスオブジェクトを返す
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        Course course = new Course(8,"Artificial Intelligence","Tom");

        int i = cMapper.insertCourse(course);

        session.commit();

        System.out.println((i!=0? "Data added successfully":"Failed to add data"));

        session.close();
    }

    @Test
    public void testUpd() throws IOException{
        // session 内の getMapper() メソッドを呼び出してインターフェイスオブジェクトを返す
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        Course course = new Course(1,"Software Testing","Jack");

        int i = cMapper.updateCourse(course);

        session.commit();

        System.out.println((i!=0? "Data updated successfully":"Failed to update data"));

        session.close();
    }

    @Test
    public void testDEl() throws IOException{
        // session 内の getMapper() メソッドを呼び出してインターフェイスオブジェクトを返す
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        int i = cMapper.deleteCourse(7);

        session.commit();

        System.out.println((i!=0? "Data deleted successfully":"Failed to delete data"));

        session.close();
    }
}

これらの手順を完了すると、プロジェクトを正常に設定し、エンティティクラスを改善し、MyBatis の設定を構成し、CourseMapperインターフェイスを実装し、テストケースを実装することができました。これで、アプリケーションの機能を検証するためにテストを実行できます。

実行

次に、ターミナルでコンパイルして実行し、Maven を使用してテストファイルを確認します。

cd MyBatisCourseDemo02
mvn test

チャレンジ結果を確認するには、以下の手順を参照してください。

未完成のテストケース画像

テスト実行結果

まとめ

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

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習