我想在Spring中(在SQL Server上)运行JDBC查询,这将(轻松地)获得下表:
+-----------------+
| ID Text Country |
+-----------------+
| 1 Test US |
| 1 Test UK |
+-----------------+
我想把它放在这样的Java类中:
class TestClass {
private int id;
private String text;
private List<String> country;
}
因此,以上应该只给我一个对象。我可以/如何使用RowMapper做到这一点?如果我有
public TestClass mapRow(ResultSet rs, int rowNum) throws SQLException {
TestClass test = new TestClass();
test.setId(rs.getInt("ID"));
test.setText(rs.getString("Text"));
return test;
}
我真的不能聚合多行,因为RowMapper(顾名思义)适用于行。
我之前使用Hibernate做到了这一点,虽然可以运行,但是速度非常慢,所以我想尽快在SQL Server上生成所有需要的结果。因为我只需要用于创建JSON对象的结果,所以我猜想如果我基于String工作就可以了。
谢谢!
最佳答案
您必须使用ResultSetExtractor而不是RowMapper。
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.ResultSetExtractor;
public class DBReader implements ResultSetExtractor {
@Override
public Object extractData(ResultSet rs) throws SQLException,
DataAccessException {
Map<String, TestClass> items = new HashMap<String, TestClass>();
while(rs.next()) {
TestClass test = items.get(rs.getString("ID"));
if (test == null) {
test = new TestClass();
test.setId(rs.getInt("ID"));
test.setText(rs.getString("Text"));
}
test.getCountry().add(rs.getString("Country"));
}
return items;
}
}
在您的TestClass中,如下更改您的国家/地区列表持有人
private List<String> country = new ArrayList<String>();
关于java - RowMapper将多个结果放入列表属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32093350/