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

JavaScriptJavaScriptBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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

👀 プレビュー

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

🎯 タスク

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

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

🏆 成果

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

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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript/BasicConceptsGroup -.-> javascript/functions("Functions") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/oop("Object-Oriented Programming") javascript/AdvancedConceptsGroup -.-> javascript/error_handle("Error Handling") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/NetworkingGroup -.-> javascript/http_req("HTTP Requests") javascript/NetworkingGroup -.-> javascript/json("JSON") javascript/NetworkingGroup -.-> javascript/api_interact("API Interaction") subgraph Lab Skills javascript/functions -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/obj_manip -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/oop -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/error_handle -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/dom_manip -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/http_req -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/json -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} javascript/api_interact -.-> lab-300354{{"MyBatis を使ったコーススケジュールの CRUD 操作"}} end

プロジェクトを構成する

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

  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でさらに多くの実験を行ってみてください。