JdbcTemplateを使用してデータベースを操作する
JdbcTemplate を Spring Boot プロジェクトに正常に統合した後、JdbcTemplate データベース接続テンプレートを使用してデータベースを操作するにはどうすればよいですか? 次に、JdbcTemplate が生徒情報の追加、削除、変更、確認などの操作をどのように実装できるかを例を使用して説明します。学習して実際に使用して、理解を深めていきましょう。
生徒データ管理機能の実装
ステップ01エンティティクラスを作成します。
以前に作成した Student テーブル構造に基づいて、対応するエンティティ クラス Student を作成します。具体的なコードは次のとおりです。
public class Student {
private Long id;
private String name;
private int sex;
private int age;
public Student() {
}
public Student(String name , int sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
//省略get、set方法
}
エンティティクラスのデータ型はデータベースフィールドと 1 対 1 に対応する必要があることに注意してください。
ステップ 02リポジトリ インターフェイスを定義します。
まず、StudentRepository インターフェイスを作成し、一般的に使用される追加、削除、変更、およびチェック インターフェイス メソッドを定義します。サンプル コードは次のとおりです。
public interface StudentRepository {
int save(Student student);
int update(Student student);
int delete(Long id);
Student findById(Long id);
}
上記の例では、save()、update()、delete()、および findById() メソッドが StudentRepository に定義されています。
次に、StudentRepositoryImpl クラスを作成し、StudentRepository インターフェイスを継承し、インターフェイスに add、delete、modify、および query メソッドを実装します。サンプル コードは次のとおりです。
@Repository
public class StudentRepositoryImpl implements StudentRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
}
上記の例では、@Repository アノテーションが StudentRepositoryImpl クラスで使用されてデータ アクセス コンポーネント JdbcTemplate にアノテーションが付けられ、JdbcTemplate インスタンスがクラスに挿入されます。
ステップ03:追加、削除、変更、確認の機能を実装します。
次に、追加、削除、変更、検索の対応するメソッドが 1 つずつ実装されます。
1) 新規追加: StudentRepositoryImpl クラスの StudentRepository インターフェイスに save() メソッドを実装します。サンプルコードは次のとおりです。
@Override
public int save(Student student) {
return jdbcTemplate.update("INSERT INTO Student(name, sex, age) values(?,?,?)",
student.getName(),student .getSex(),student.getAge());
}
JdbcTemplate では、いくつかの API のクエリに加えて、update() メソッドを呼び出して SQL を渡すだけで、すべての新規、削除、変更された操作が完了します。Update() メソッドの戻り値は、SQL 実行によって影響を受ける行数です。
2) 削除: ユーザー ID を使用してユーザー情報を削除し、StudentRepositoryImpl クラスの StudentRepository インターフェイスの update() メソッドを実装します。サンプルコードは次のとおりです。
@Override
public int delete(Long id) {
return jdbcTemplate.update("DELETE FROM Student where id = ? ", id);
}
これを見た読者は、「追加、削除、または変更するときに、どのように update() メソッドを呼び出すのですか? これは他のフレームワークとは異なりますか?」という疑問を抱くかもしれません。厳密に言えば、追加、削除、変更はすべてデータの書き込みに属しますが、データベース内のデータの変更は、update() を通じて対応する SQL ステートメントを実行することで実現できます。
3) 変更: 変更は新規追加と同様で、StudentRepositoryImpl クラスに StudentRepository インターフェースの update() メソッドを実装します。サンプルコードは次のとおりです。
@Override
public int update(Student student) {
return jdbcTemplate.update("UPDATE Student SET name = ? , password = ? , age = ?, WHERE id=?", student.getName(), student.getSex(), student.getAge(), student.getId());
}
4) クエリ: ユーザー ID に基づいてユーザー情報をクエリします。また、StudentRepositoryImpl クラスの StudentRepository インターフェイスの findById() メソッドを実装します。サンプルコードは次のとおりです。
@Override
public Student findById(long id) {
return jdbcTemplate.queryForObject("SELECT * FROM Student WHERE id=?", new Object[] {
id }, new BeanPropertyRowMapper<Student>(Student.class));
}
上記の例では、JdbcTemplate はクエリ関連のステートメントを実行して query() メソッドと queryForXXX() メソッドを呼び出し、クエリ オブジェクトは queryForObject メソッドを呼び出します。JdbcTemplate は、クエリ結果のエンティティ オブジェクトへの変換をサポートし、新しい BeanPropertyRowMapper(Student.class) を使用して返されたデータをカプセル化します。名前の一致を通じて、データ列を指定されたクラスのエンティティ クラスに自動的にマップします。
クエリ操作を実行する場合、クエリされた列とエンティティ クラスの属性を 1 対 1 で照合するには、RowMapper が必要です。列名と属性名が同じ場合は、BeanPropertyRowMapper を直接使用できます。列名が同じ場合は、BeanPropertyRowMapper を直接使用できます。属性名が異なる場合は、開発者自身が RowMapper インターフェイスを実装して、データ列をエンティティ クラスの属性フィールドにマップする必要があります。
ステップ04検証テスト。
次に、カプセル化された StudentRepository をテストして、StudentRepository の各メソッドが正しいかどうかを確認します。StudentRepositoryTests クラスを作成し、studentRepository をテスト クラスに挿入します。
@SpringBootTest
class StudentRepositoryImplTest {
@Autowired
private StudentRepository studentRepository;
@Test
void save() {
Student student = new Student("example", 1, 30);
studentRepository.save(student);
}
@Test
void update() {
Student student = new Student("example", 1, 18);
student.setId(1L);
studentRepository.update(student);
}
@Test
void delete() {
studentRepository.delete(1L);
}
@Test
void findById() {
Student student = studentRepository.findById(1L);
System.out.println("student == " + student.toString());
}
}
次に、上記の単体テストメソッドを順に実行し、生徒情報の追加、削除、変更、確認機能が正常であるかどうかを検証すると、図のような結果になります。
結果は、単体テストが正常に実行されたこと、つまり StudentRepository 内のメソッドが正常に実行されたことを示しています。また、データベース内のデータが期待どおりであるかどうかも確認できます。