我想在Spring中运行一个JDBC查询(在SQL Server上),这将(松散地)让我得到下表:
+-----------------+
| 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基础上工作就没问题。
谢谢!
答案 0 :(得分:0)
您必须使用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>();