Tôi đang nghiên cứu cách thực hiện truy vấn trên cơ sở dữ liệu bằng JDBC trong Spring Framework.Một số nghi ngờ về việc sử dụng RowMapper trong JDBC trong ứng dụng Khung công tác
Tôi làm theo hướng dẫn này: http://www.tutorialspoint.com/spring/spring_jdbc_example.htm
Trong hướng dẫn này, tôi định nghĩa một giao diệnStudentDAO mà chỉ xác định các phương pháp CRUD mà tôi muốn.
Sau đó, được xác định là lớp học Sinh viên là thực thể mà tôi muốn lưu giữ trên bảng cơ sở dữ liệu Sinh viên.
Sau đó được định nghĩa lớp StudentMapper đó là một thực hiện cụ thể của giao diện RowMapper rằng, trong trường hợp này, được sử dụng để ánh xạ một bản ghi cụ thể trong ResultSet (được trả về bởi một truy vấn) cho một sinh viên đối tượng.
Sau đó, tôi có StudentJDBCTemplate rằng rappresent việc thực hiện các giao diện của tôi StudentDAO, trong lớp này tôi thực hiện phương pháp CRUD mà được định nghĩa trong giao diện.
Ok, và bây giờ tôi có một nghi ngờ về cách thức StudentMapper lớp làm việc: trong StudentJDBCTemplate lớp này có được định nghĩa phương thức trả lại danh sách của tất cả các kỷ lục mà trong bảng cơ sở dữ liệu sinh viên, chương trình này:
public List<Student> listStudents() {
String SQL = "select * from Student";
List <Student> students = jdbcTemplateObject.query(SQL,
new StudentMapper());
return students;
}
làm thế nào bạn có thể thấy, phương pháp này trả về một Danh sách các đối tượng sinh viên và làm việc theo cách sau:
điều đầu tiên mà nó làm là xác định các truy vấn mà trả lại tất cả kỷ lục trong St bảng cơ sở dữ liệu udent trong chuỗi SQL.
Sau đó truy vấn này được thực hiện bởi các cuộc gọi phương thức truy vấn trên đối tượng jdbcTemplateObject (có nghĩa là một istance của JdbcTemplate lớp Xuân **
Phương pháp này có hai tham số: String SQL (có chứa các truy vấn SQL phải được thực hiện) và một StudentMapper đối tượng mới mà lấy ResultSet đối tượng được trả về bởi các truy vấn và lập bản đồ đó là kỷ lục trên một đối tượng sinh viên mới
Đọc ở đây: http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html sayas rằng: Ex tạo một truy vấn cho SQL tĩnh, ánh xạ mỗi hàng tới một đối tượng Java thông qua một RowMapper.
Nghi ngờ của tôi có liên quan đến thực tế là tôi StudentMapper ánh xạ một kỷ lục ResultSet trên một đối tượng sinh viên sử dụng mapRow() phương pháp, đây là đoạn code:
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;
}
}
Vì vậy, người gọi phương thức mapRow này? nó có được gọi tự động bởi Spring Framework không? (bởi vì trong ví dụ này không bao giờ được gọi là thủ công ...)
Tnx
Andrea
Sau đó truy vấn này được thực hiện bởi các cuộc gọi phương thức truy vấn trên đối tượng jdbcTemplateObject (có nghĩa là một istance của JdbcTemplate lớp Xuân **