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


🎯 タスク
このプロジェクトでは、以下を学びます。
- プロジェクトを構成し、必要な依存関係を設定する方法
- プロパティ、コンストラクタ、セッター/ゲッターメソッドなどを追加することで、
Courseエンティティクラスを改善する方法 - MyBatis の設定ファイル
mybatis-config.xmlを改善する方法 CourseMapperインターフェイスとその対応するメソッドを実装する方法CourseMapper.xmlファイルで SQL マッピングを実装する方法MyBatisTest.javaファイルでテストケースを実装する方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- MyBatis を使用して MySQL データベースとやり取りする
- エンティティクラスを定義し、MyBatis のマッピングファイルを構成する
- MyBatis を使用して CRUD 操作を実装する
- アプリケーションの機能を検証するための単体テストを書く
プロジェクトを設定する
このステップでは、プロジェクトを構成し、必要な依存関係を設定する方法を学びます。
MyBatisCourseDemo02プロジェクト内のpom.xmlファイルを開きます。<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>
- 文字コードと 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>
- 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 エンティティクラスを改善します。
/src/main/java/org/labex/pojoディレクトリ内のCourse.javaファイルを開きます。Courseクラスに以下のプロパティを追加します。
private int cNo;
private String cName;
private String teacher;
- 以下のコンストラクタを追加します。
public Course() {
}
public Course(int cNo, String cName, String teacher) {
this.cNo = cNo;
this.cName = cName;
this.teacher = teacher;
}
- 以下のゲッターとセッターメソッドを追加します。
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;
}
- 以下の
toString()メソッドを追加します。
@Override
public String toString() {
return "Course number: " + this.cNo + "\tCourse name: " + this.cName + "\tTeacher: " + this.teacher;
}
MyBatis の設定を改善する
このステップでは、MyBatis の設定ファイルmybatis-config.xmlを改善します。
src/main/resourcesディレクトリ内のmybatis-config.xmlファイルを開きます。- エンティティクラスのエイリアスを定義するために、以下の
<typeAliases>セクションを追加します。
<typeAliases>
<package name="org.labex.pojo"/>
</typeAliases>
<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>
<mappers>セクションで SQL マッピングファイルCourseMapper.xmlを登録します。
<mappers>
<package name="org.labex.mapper" />
</mappers>
CourseMapper インターフェイスを実装する
このステップでは、CourseMapperインターフェイスとその対応するメソッドを実装します。
org.labex.mapperパッケージ内のCourseMapper.javaファイルを開きます。- 以下のメソッドを
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 マッピングを実装します。
src/main/java/org/labex/mapperディレクトリ内のCourseMapper.xmlファイルを開きます。- 以下の 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ファイルにおいてテストケースを実装します。
/src/test/java/org/labex/testディレクトリ内のMyBatisTest.javaファイルを開きます。- 以下のテストメソッドを追加します。
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 でさらに多くの実験を行ってみてください。



