Как преобразовать результат запроса шаблона JDBC в массив JSON в Java? - PullRequest
0 голосов
/ 03 июля 2018

Я конвертирую программное обеспечение из Delphi в Spring boot. У меня много запросов в существующей базе данных SQL Server, и я хочу их отобразить.

Для каждого запроса мне нужно создать класс сущностей, который переопределяет отображение строк и создаст класс сущностей.

public class PregledTroskova {
int RbrStavke;
int RbrNaloga;
String Konto;
String SifKomint;
float Duguje;
float Potrazuje;

public PregledTroskova() {
}

public int getRbrStavke() {
    return RbrStavke;
}

public void setRbrStavke(int rbrStavke) {
    RbrStavke = rbrStavke;
}

public int getRbrNaloga() {
    return RbrNaloga;
}

public void setRbrNaloga(int rbrNaloga) {
    RbrNaloga = rbrNaloga;
}

public String getKonto() {
    return Konto;
}

public void setKonto(String konto) {
    Konto = konto;
}

public String getSifKomint() {
    return SifKomint;
}

public void setSifKomint(String sifKomint) {
    SifKomint = sifKomint;
}

public float getDuguje() {
    return Duguje;
}

public void setDuguje(float duguje) {
    Duguje = duguje;
}

public float getPotrazuje() {
    return Potrazuje;
}

public void setPotrazuje(float potrazuje) {
    Potrazuje = potrazuje;
}
}

Затем я должен написать еще один класс для маппера

class PregledTroskovaRowMapper implements RowMapper<PregledTroskova> {
@Override
public PregledTroskova mapRow(ResultSet resultSet, int i) throws SQLException {
    PregledTroskova pregledTroskova = new PregledTroskova();
    pregledTroskova.setDuguje(resultSet.getFloat("Duguje"));
    pregledTroskova.setPotrazuje(resultSet.getFloat("Potrazuje"));
    pregledTroskova.setRbrStavke(resultSet.getInt("RbrStavke"));
    pregledTroskova.setRbrNaloga(resultSet.getInt("RbrNaloga"));
    pregledTroskova.setKonto(resultSet.getString("Konto"));
    pregledTroskova.setSifKomint(resultSet.getString("SifKomint"));
    return pregledTroskova;
}
}

Есть ли способ просто сгенерировать список / массив json объекта, где свойством является значение имени набора результатов для всех строк из select?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Пример:

 String sql = "select * from mytable";
   result=  jdbcTemplate.query(sql, new AnyObjectMapper());

Mapper (универсальный):

class AnyObjectMapper implements RowMapper<Map<String, Object>> {

    public AnyObjectMapper() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {

        ResultSetMetaData rsMeta = rs.getMetaData();
        int colCount = rsMeta.getColumnCount();

        Map<String, Object> columns = new HashMap<String, Object>();
        for (int i = 1; i <= colCount; i++) {

            columns.put(rsMeta.getColumnLabel(i), rs.getObject(i));
        }
        return columns;

    }
}
0 голосов
/ 03 июля 2018

Если вы не хотите создавать класс сущностей для каждого запроса, вы можете вернуть List<Map<String, Object>>, который является списком всех строк, каждая строка представлена ​​Map (столбец / значение).

Пример:

final List<Map<String, Object>> rows = jdbcTemplate.queryForList(yourQuery);
for (final Map<String, Object> row : rows) {
    // do something like : row.get("yourField");
}
...