SpringFrameworkでJDBCを使用してデータベースでクエリを実行する方法を研究しています。
私はこのチュートリアルに従っています:http ://www.tutorialspoint.com/spring/spring_jdbc_example.htm
このチュートリアルでは、必要なCRUDメソッドのみを定義するStudentDAOインターフェイスを定義します。
次に、Studentデータベーステーブルに保持するエンティティであるStudentクラスを定義します。
次に、 RowMapperインターフェイスの特定の実装であるStudentMapperクラスが定義されます。この場合、このクラスは、 ResultSet(クエリによって返される)の特定のレコードをStudentオブジェクトにマップするために使用されます。
次に、 StudentDAOインターフェイスの実装を表すStudentJDBCTemplateがあります。このクラスでは、インターフェイスで定義されたCRUDメソッドを実装します。
さて、 StudentMapperクラスがどのように機能するかについて疑問があります。このStudentJDBCTemplateクラスには、Studentデータベーステーブルにあるすべてのレコードのリストを返すメソッドが定義されています。これは次のとおりです。
public List<Student> listStudents() {
String SQL = "select * from Student";
List <Student> students = jdbcTemplateObject.query(SQL,
new StudentMapper());
return students;
}
ご覧のとおり、このメソッドはStudentオブジェクトのリストを返し、次のように機能します。
最初に行うことは、SQL文字列のStudentデータベーステーブルのすべてのレコードを返すクエリを定義することです。
次に、このクエリは、jdbcTemplateObjectオブジェクト(つまり、JdbcTemplateSpringクラス**のインスタンス)に対するqueryメソッド呼び出しによって実行されます。
このメソッドは2つのパラメーターを取ります。SQL文字列(実行する必要のあるSQLクエリを含む)と、クエリによって返されたResultSetオブジェクトを受け取り、そのレコードを新しいStudentオブジェクトにマップする新しいStudentMapperオブジェクトです。
ここを読む:http : //static.springsource.org/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html次のように言います:静的SQLを指定してクエリを実行し、各行をJavaにマッピングしますRowMapperを介したオブジェクト。
私の疑問は、StudentMapperがmapRow()メソッドを使用してStudentオブジェクトにResultSetレコードをマップするという事実に関連しています。これは、次のコードです。
package com.tutorialspoint;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
では、誰がこのmapRowメソッドを呼び出しますか?Spring Frameworkによって自動的に呼び出されますか?(この例では手動で呼び出されることはないため...)
Tnx
アンドレア
次に、このクエリは、jdbcTemplateObjectオブジェクト(つまり、JdbcTemplateSpringクラス**のインスタンス)に対するqueryメソッド呼び出しによって実行されます。