And*_*ili 15 java spring jdbc spring-mvc spring-jdbc
我正在研究如何在Spring Framework中使用JDBC对数据库执行查询.
我正在学习本教程:http://www.tutorialspoint.com/spring/spring_jdbc_example.htm
在本教程中,我定义了一个StudentDAO接口,它只定义了我想要的CRUD方法.
然后定义Student类,它是我想要在Student数据库表上保留的实体.
然后定义StudentMapper类,它是RowMapper接口的特定实现,在这种情况下,用于将ResultSet中的特定记录(由查询返回)映射到Student对象.
然后,我有StudentJDBCTemplate是rappresent我实施StudentDAO界面,在这个类我实现的接口中定义的CRUD方法.
好了,现在我有一个关于如何疑问StudentMapper类的工作:在这个StudentJDBCTemplate类有定义的返回是在学生数据库表中的所有记录的列表的方法,这其中:
public List<Student> listStudents() {
String SQL = "select * from Student";
List <Student> students = jdbcTemplateObject.query(SQL,
new StudentMapper());
return students;
}
Run Code Online (Sandbox Code Playgroud)
你怎么看,这个方法返回一个List of Student对象并按以下方式工作:
它首先要做的是定义返回 SQL String中Student数据库表中所有记录的查询.
然后通过jdbcTemplateObject对象上的查询方法调用执行此查询(这是JdbcTemplate Spring类的一个等级**
此方法有两个参数:SQL String(包含必须执行的SQL查询)和一个新的StudentMapper对象,它接受查询返回的ResultSet对象并将其记录映射到新的Student对象上
在这里阅读:http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html sayas:执行给定静态SQL的查询,将每一行映射到Java通过RowMapper对象.
我的疑问是有关事实,我的StudentMapper映射使用一个Student对象上一个ResultSet记录mapRow()方法,这是代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
那么,谁调用这个mapRow方法呢?它是由Spring Framework自动调用的吗?(因为在这个例子中永远不会手动调用...)
TNX
安德里亚
然后通过jdbcTemplateObject对象上的查询方法调用执行此查询(这是JdbcTemplate Spring类的一个等级**
Sot*_*lis 23
将实例传递RowMapper给JdbcTemplate方法时
List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
Run Code Online (Sandbox Code Playgroud)
将JdbcTemplate取决于哪种方法你打电话,将在内部使用,结果映射器设置它从JDBC连接变得创建您的请求类型的对象.例如,自从您调用以来JdbcTemplate#query(String, RowMapper),该方法将使用您的String SQL来查询数据库,并将循环遍历每个"行" ResultSet,如下所示:
ResultSet rs = ... // execute query
List<Student> students = ...// some list
int rowNum = 0;
while(rs.next()) {
Student student = rowMapper.mapRow(rs, rowNum);
students.add(student);
rowNum++;
}
return students;
Run Code Online (Sandbox Code Playgroud)
所以,Spring的JdbcTemplate方法将使用RowMapper您提供和调用它的mapRow方法来创建预期收益目标.
您可能希望将Martin Fowler的数据映射器与表数据网关结合使用,以了解这些内容如何分布并提供低耦合.
| 归档时间: |
|
| 查看次数: |
52000 次 |
| 最近记录: |