はじめに
このプロジェクトでは、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エンティティクラスにプロパティを追加してコースの属性(ブール値cProperties、trueは必修科目、falseは選択科目を表す)を表現する方法- ブール値と整数値の間で変換するためのカスタム型ハンドラを作成する方法
- MyBatis の設定ファイルでカスタム型ハンドラを登録する方法
- 新しい
cPropertiesフィールドを使用するようにコーステーブルとCourseMapperを更新する方法 - カスタム型ハンドラを使用してデータベース内のコース情報を更新する方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
BaseTypeHandlerクラスを拡張してカスタム型ハンドラを作成する- MyBatis の設定ファイルでカスタム型ハンドラを登録する
- カスタムフィールドを使用するようにデータベーススキーマと対応するマッパーファイルを更新する
- カスタム型ハンドラを使用してデータベース内のデータを更新する
エンティティクラスにコースプロパティを追加する
このステップでは、コース属性(ブール値 cProperties、true は必修科目、false は選択科目を表す)を表現するために、エンティティクラス Course.java に属性を追加する方法を学びます。
org.lanqiao.pojoパッケージにあるCourse.javaファイルを開きます。Courseクラスに private のブール型フィールドcPropertiesを追加します。
private Boolean cProperties;
cPropertiesフィールドのgetterとsetterメソッドを生成します。
public Boolean getcProperties() {
return cProperties;
}
public void setcProperties(Boolean cProperties) {
this.cProperties = cProperties;
}
- コンストラクタを更新して、
cPropertiesパラメータを含めます。
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
this.cNo = cNo;
this.cName = cName;
this.teacher = teacher;
this.cProperties = cProperties;
}
toString()メソッドを更新して、cProperties情報を含めます。
@Override
public String toString() {
return "Course Number: " + this.cNo + "\tCourse Name: " + this.cName + "\tInstructor: " + this.teacher + "\tCompulsory Course: " + (this.cProperties? "true" : "false");
}
カスタム型ハンドラを作成する
このステップでは、ブール値と整数値の間で変換するためのカスタム型ハンドラを作成する方法を学びます。
org.lanqiao.converterパッケージに新しい Java クラスBooleanAndIntConverterを作成します。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 にカスタム型ハンドラを登録する方法を学びます。
プロジェクトのルートディレクトリにある
mybatis-config.xmlファイルを開きます。カスタム型ハンドラを登録するために、次の設定を追加します。
<typeHandlers>
<typeHandler handler="org.lanqiao.converter.BooleanAndIntConverter"/>
</typeHandlers>
この設定により、MyBatis は BooleanAndIntConverter クラスを使用してブール値と整数値の間の変換を処理するように指示されます。
コーステーブルとマッパーを更新する
このステップでは、新しい cProperties フィールドを使用するようにコーステーブルと CourseMapper を更新する方法を学びます。
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>
insertCourse と updateCourse の文には現在 cProperties フィールドが含まれています。
コース情報を更新する
このステップでは、カスタム型ハンドラを使用してコース情報を更新する方法を学びます。
MyBatisTest.javaファイルを開きます。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 に設定され、必修科目を表します。
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 に設定され、必修科目を表します。
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();
}
これらの手順を完了すると、エンティティクラスにコース属性を正常に追加し、ブール値と整数値の間で変換するカスタム型ハンドラを作成し、カスタム型ハンドラを使用してデータベース内のコース情報を更新することができました。
- アプリケーションをテストします。
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 でさらに多くの実験を行って練習してください。



