カスタムプロパティを持つエンティティの拡張

JavaJavaBeginner
今すぐ練習

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

はじめに

このプロジェクトでは、MyBatisアプリケーションでエンティティクラスにカスタムプロパティを追加し、ブール値と整数値の間で変換するためのカスタム型ハンドラを使用する方法を学びます。

👀 プレビュー

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Data deleted successfully
Data added successfully
[Course Number: 1       Course Name: Data Structures    Instructor: Zoe Compulsory Course: false, Course Number: 2      Course Name: JAVA       Instructor: William     Compulsory Course: true, Course Number: 3  Course Name: Python     Instructor: Olivia      Compulsory Course: true, Course Number: 4       Course Name: C++        Instructor: Brian  Compulsory Course: false, Course Number: 6      Course Name: C  Instructor: Lisa        Compulsory Course: true, Course Number: 8       Course Name: Artificial Intelligence       Instructor: Tom Compulsory Course: true]
Data updated successfully
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.119 sec
...
cNo     cName   teacher cProperties
1       Software Testing        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Artificial Intelligence Tom     1

🎯 タスク

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

  • Course エンティティクラスにプロパティを追加してコースの属性(ブール値 cPropertiestrue は必修科目、false は選択科目を表す)を表現する方法
  • ブール値と整数値の間で変換するためのカスタム型ハンドラを作成する方法
  • MyBatisの設定ファイルでカスタム型ハンドラを登録する方法
  • 新しい cProperties フィールドを使用するようにコーステーブルと CourseMapper を更新する方法
  • カスタム型ハンドラを使用してデータベース内のコース情報を更新する方法

🏆 成果

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

  • BaseTypeHandler クラスを拡張してカスタム型ハンドラを作成する
  • MyBatisの設定ファイルでカスタム型ハンドラを登録する
  • カスタムフィールドを使用するようにデータベーススキーマと対応するマッパーファイルを更新する
  • カスタム型ハンドラを使用してデータベース内のデータを更新する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/type_casting("Type Casting") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_attributes("Class Attributes") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("Constructors") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/annotation("Annotation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/jdbc("JDBC") java/SystemandDataProcessingGroup -.-> java/xml_dom4j("XML/Dom4j") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/type_casting -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/classes_objects -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/class_attributes -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/constructors -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/encapsulation -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/annotation -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/jdbc -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/xml_dom4j -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} java/object_methods -.-> lab-300358{{"カスタムプロパティを持つエンティティの拡張"}} end

エンティティクラスにコース属性を追加する

このステップでは、コース属性(ブール値 cPropertiestrue は必修科目、false は選択科目を表す)を表現するために、エンティティクラス Course.java に属性を追加する方法を学びます。

  1. org.lanqiao.pojo パッケージにある Course.java ファイルを開きます。

  2. Course クラスに private のブール型フィールド cProperties を追加します。

private Boolean cProperties;
  1. cProperties フィールドの gettersetter メソッドを生成します。
public Boolean getcProperties() {
    return cProperties;
}

public void setcProperties(Boolean cProperties) {
    this.cProperties = cProperties;
}
  1. コンストラクタを更新して、cProperties パラメータを含めます。
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
    this.cNo = cNo;
    this.cName = cName;
    this.teacher = teacher;
    this.cProperties = cProperties;
}
  1. toString() メソッドを更新して、cProperties 情報を含めます。
@Override
public String toString() {
    return "Course Number: " + this.cNo + "\tCourse Name: " + this.cName + "\tInstructor: " + this.teacher + "\tCompulsory Course: " + (this.cProperties? "true" : "false");
}
✨ 解答を確認して練習

カスタム型ハンドラを作成する

このステップでは、ブール値と整数値の間で変換するためのカスタム型ハンドラを作成する方法を学びます。

  1. org.lanqiao.converter パッケージに新しいJavaクラス BooleanAndIntConverter を作成します。

  2. BaseTypeHandler<Boolean> クラスを拡張し、次のメソッドを実装します。

public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i, aBoolean? 1 : 0);
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int result = resultSet.getInt(s);
        return result == 1;
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int result = resultSet.getInt(i);
        return result == 1;
    }

    @Override
    public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int result = callableStatement.getInt(i);
        return result == 1;
    }
}

setNonNullParameter() メソッドはブール値を整数値に変換し(true の場合は1、false の場合は0)、getNullableResult() メソッドは整数値をブール値に変換します(1の場合は true、0の場合は false)。

✨ 解答を確認して練習

カスタム型ハンドラを登録する

このステップでは、MyBatisの設定ファイル mybatis-config.xml にカスタム型ハンドラを登録する方法を学びます。

  1. プロジェクトのルートディレクトリにある mybatis-config.xml ファイルを開きます。

  2. カスタム型ハンドラを登録するために、次の設定を追加します。

<typeHandlers>
    <typeHandler handler="org.lanqiao.converter.BooleanAndIntConverter"/>
</typeHandlers>

この設定により、MyBatisは BooleanAndIntConverter クラスを使用してブール値と整数値の間の変換を処理するように指示されます。

✨ 解答を確認して練習

コーステーブルとマッパーを更新する

このステップでは、新しい cProperties フィールドを使用するようにコーステーブルと CourseMapper を更新する方法を学びます。

  1. CourseMapper.xml ファイルを開き、SQL文を更新して cProperties フィールドを使用するようにします。
<insert id="insertCourse" parameterType="org.lanqiao.pojo.Course">
    insert into course(cNo,cName,teacher,cProperties)
    values(#{cNo},#{cName},#{teacher},#{cProperties})
</insert>

<update id="updateCourse" parameterType="org.lanqiao.pojo.Course">
    update course set cName=#{cName},teacher=#{teacher},cProperties=#{cProperties}
    where cNo=#{cNo}
</update>

insertCourseupdateCourse の文には現在 cProperties フィールドが含まれています。

✨ 解答を確認して練習

コース情報を更新する

このステップでは、カスタム型ハンドラを使用してコース情報を更新する方法を学びます。

  1. MyBatisTest.java ファイルを開きます。

  2. testUpd() メソッドで、コース番号1のコースの情報を更新します。

@Test
public void testUpd() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

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

    int i = cMapper.updateCourse(course);

    session.commit();

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

    session.close();
}

cProperties フィールドは true に設定され、必修科目を表します。

  1. testIns() メソッドで、コース番号8の新しいコースを挿入します。
@Test
public void testIns() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

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

    int i = cMapper.insertCourse(course);

    session.commit();

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

    session.close();
}

cProperties フィールドは true に設定され、必修科目を表します。

  1. testDEl() メソッドで、コース番号7のコースを削除します。
@Test
public void testDEl() throws IOException {
    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();
}

これらの手順を完了すると、エンティティクラスにコース属性を正常に追加し、ブール値と整数値の間で変換するカスタム型ハンドラを作成し、カスタム型ハンドラを使用してデータベース内のコース情報を更新することができました。

  1. アプリケーションをテストします。
cd ~/project/MyBatisCourseDemo02/
mvn test
echo "USE MyBatisDemo; SELECT * FROM course;" | mysql -u root > course_data.txt
cat course_data.txt

出力は以下のようになります。

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Data deleted successfully
Data added successfully
[Course Number: 1       Course Name: Data Structures    Instructor: Zoe Compulsory Course: false, Course Number: 2      Course Name: JAVA       Instructor: William     Compulsory Course: true, Course Number: 3  Course Name: Python     Instructor: Olivia      Compulsory Course: true, Course Number: 4       Course Name: C++        Instructor: Brian  Compulsory Course: false, Course Number: 6      Course Name: C  Instructor: Lisa        Compulsory Course: true, Course Number: 8       Course Name: Artificial Intelligence       Instructor: Tom Compulsory Course: true]
Data updated successfully
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.119 sec
...
cNo     cName   teacher cProperties
1       Software Testing        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Artificial Intelligence Tom     1
✨ 解答を確認して練習

まとめ

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