我想在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/

10-10 06:06