Spring 1.2 中的 RowMapper 方法如何工作?
How is the RowMapper Method working from Spring 1.2?
我正在为我的公司编写 Spring 1.2 实施的巨型应用程序的文档,该应用程序在大约 8 年前编码时没有记录。
现在我正在使用 java classes 之一,并坚持使用特定方法来了解它的实际工作方式,特别是 "new RowMapper()" 开始的部分。我看过不同的行映射器示例,但仍然对它的实际作用感到困惑。任何有 Spring 经验的人,请帮助我。
我只想知道这个方法是干什么的
这些是从 Java Sql 和 Spring Framework 为 class.
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.rowset.SqlRowSet;
initOrderList 方法
private List initOrderList(java.util.Date ShipDate, final String sqlStatement)
{
Calendar cal = Calendar.getInstance();
cal.setTime(ShipDate);
cal.add(5, 1);
java.util.Date ship1 = cal.getTime();
final java.sql.Date sqlToday = new java.sql.Date(ShipDate.getTime());
final java.sql.Date shipDate = new java.sql.Date(ship1.getTime());
final java.sql.Date ESDDate = new java.sql.Date(ShipDate.getTime());
List ret = this.jdbcTemplate.query(new PreparedStatementCreator()
new RowMapper
{
public PreparedStatement createPreparedStatement(Connection conn)
throws SQLException
{
PreparedStatement ps = conn.prepareStatement(sqlStatement);
ps.setDate(1, sqlToday);
ps.setDate(2, shipDate);
ps.setDate(3, ESDDate);
return ps;
}
}, new RowMapper()
{
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException
{
VCData vcData = new VCData();
vcData.setOrderNo(rs.getString(1).trim());
vcData.setShipUserID(rs.getString(2).trim());
vcData.setShipDate(rs.getString(3).trim());
vcData.setVendorNo(rs.getString(4).trim());
vcData.setNMDiv(rs.getString(5).trim());
vcData.setESD(rs.getString(6).trim());
vcData.setOrigESD(vcData.getESD());
return vcData;
}
});
return ret;}
完整的 java class link 在这里:https://app.box.com/s/9w30z7aa3ynpk7cg7bucd298qvdarq1q
请尽量详细。我是一名实习生,正在学习。谢谢。
jdbcTemplate 将负责为您完成所有 sql 的工作并获得 java.sql.ResultSet 回报。 ResultSet 表示来自查询执行的 table 数据。
如果您自己编写纯 JDBC 代码而不是使用 Spring,您将不得不一次一行地遍历结果集(检查是否有下一条记录)并处理它。加上所有有趣的东西,比如关闭结果集和捕获 SQLException。 Spring 从你那里抽象出来。
相反,您实现了 RowMapper(在您的例子中是匿名的 class)并将其用作回调。 Spring其实就是循环遍历ResultSet,移动光标位置。你可以认为伪代码 Spring 是这样执行的
while(resultSet has more results){
move cursor to next row
VCData row = //calls your mapRow method, passing in the current row #
add row to List
}
return List<VCData>
close resultSet and cleanup
您只需告诉它在每一行上做什么。 VCData 是您对该行的表示。您返回并存储在 ret 中的列表是作为 VCData 对象的所有行的列表。
我正在为我的公司编写 Spring 1.2 实施的巨型应用程序的文档,该应用程序在大约 8 年前编码时没有记录。
现在我正在使用 java classes 之一,并坚持使用特定方法来了解它的实际工作方式,特别是 "new RowMapper()" 开始的部分。我看过不同的行映射器示例,但仍然对它的实际作用感到困惑。任何有 Spring 经验的人,请帮助我。
我只想知道这个方法是干什么的
这些是从 Java Sql 和 Spring Framework 为 class.
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.rowset.SqlRowSet;
initOrderList 方法
private List initOrderList(java.util.Date ShipDate, final String sqlStatement)
{
Calendar cal = Calendar.getInstance();
cal.setTime(ShipDate);
cal.add(5, 1);
java.util.Date ship1 = cal.getTime();
final java.sql.Date sqlToday = new java.sql.Date(ShipDate.getTime());
final java.sql.Date shipDate = new java.sql.Date(ship1.getTime());
final java.sql.Date ESDDate = new java.sql.Date(ShipDate.getTime());
List ret = this.jdbcTemplate.query(new PreparedStatementCreator()
new RowMapper
{
public PreparedStatement createPreparedStatement(Connection conn)
throws SQLException
{
PreparedStatement ps = conn.prepareStatement(sqlStatement);
ps.setDate(1, sqlToday);
ps.setDate(2, shipDate);
ps.setDate(3, ESDDate);
return ps;
}
}, new RowMapper()
{
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException
{
VCData vcData = new VCData();
vcData.setOrderNo(rs.getString(1).trim());
vcData.setShipUserID(rs.getString(2).trim());
vcData.setShipDate(rs.getString(3).trim());
vcData.setVendorNo(rs.getString(4).trim());
vcData.setNMDiv(rs.getString(5).trim());
vcData.setESD(rs.getString(6).trim());
vcData.setOrigESD(vcData.getESD());
return vcData;
}
});
return ret;}
完整的 java class link 在这里:https://app.box.com/s/9w30z7aa3ynpk7cg7bucd298qvdarq1q
请尽量详细。我是一名实习生,正在学习。谢谢。
jdbcTemplate 将负责为您完成所有 sql 的工作并获得 java.sql.ResultSet 回报。 ResultSet 表示来自查询执行的 table 数据。
如果您自己编写纯 JDBC 代码而不是使用 Spring,您将不得不一次一行地遍历结果集(检查是否有下一条记录)并处理它。加上所有有趣的东西,比如关闭结果集和捕获 SQLException。 Spring 从你那里抽象出来。
相反,您实现了 RowMapper(在您的例子中是匿名的 class)并将其用作回调。 Spring其实就是循环遍历ResultSet,移动光标位置。你可以认为伪代码 Spring 是这样执行的
while(resultSet has more results){
move cursor to next row
VCData row = //calls your mapRow method, passing in the current row #
add row to List
}
return List<VCData>
close resultSet and cleanup
您只需告诉它在每一行上做什么。 VCData 是您对该行的表示。您返回并存储在 ret 中的列表是作为 VCData 对象的所有行的列表。