Создание нескольких объектов с одним ответом с помощью Spring FrameWork - PullRequest
0 голосов
/ 13 ноября 2018

Я впервые использую Spring для добавления и получения данных из database.Я успешно установил соединение с моим database и могу добавить Plants только с id и plantName, но теперь для части, которую я не понимаю.
Как я могу создать RowMapper или что-то еще, что работало бы с циклом, который бы получил Plant и прошел бы по всем PlantParts, чтобы получить мне нужный мне объект.
Я должен отметить, что Plant - это просто объект, который я создал, чтобы попросить его сделать его более понятным и простым для ответа.

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Plant {
    private Long id;
    private String plantName;
    private List<PlantParts> plantParts;

    public void add(PlantParts plantPartsObj) {
        if (plantParts == null) {
            plantParts = new ArrayList<>();
        }

        plantParts.add(plantPartsObj);
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PlantParts {
    private String leaves;
    private String pedicle;
    private String petals;
}

Сначала я создаю Plant объект с этим запросом:

INSERT INTO PLANTS (id, plantname)
  VALUES (NEXT VALUE FOR sequence, ?);

Затем я добавляю несколько PlantParts с помощью этого запроса:

INSERT INTO PLANT_PARTS (id, leaves, pedicle, petals)" +
                        "  VALUES (?, ?, ?, ?);

И теперь я пытаюсь превратить все это в один Plant объект, но я не понимаю, какЯ могу получить несколько PlantParts с одним RowMapper.

И это будет мой код с использованием Spring:

@Repository
public class PlantDao {

    @Autowired
    private JdbcTemplate template;

    @Override
    public Order getPlantById(Long id) {
        String sql = "SELECT plants.id, plants.plantName, plant_parts.id, plant_parts.leaves, plant_parts.pedicle, plant_parts.petals " +
                "FROM plants " +
                "LEFT JOIN plant_parts ON plants.id = plant_parts.id AND plants.id = ?";

        return template.queryForObject(sql, new Object[] {id}, getPostRowMapper());

    }

    private RowMapper<Plant> getPostRowMapper() {
        return (rs, rowNum) -> new Plant(
                rs.getLong("id"),
                rs.getString("plantname")

                //Check if there are any PlantParts, if yes then go over
                //all of the PlantParts in a loop

        });
    }

Теперь часть, которую я не понимаю, закомментирована,Как я могу просмотреть все PlantParts в RowMapper.

Я бы хотел, чтобы RowMapper сделал что-то подобное после установки id and plantname:

//For the first line
if(rs.getString("leaves") != null){
    plant.add(new PlantRow(rs.getString("leaves"),
            rs.getInt("pedicle"), rs.getInt("petals")));
}
while (rs.next()){
    if(rs.getString("leaves") != null){
        plant.add(new PlantRow(rs.getString("leaves"),
                rs.getInt("pedicle"), rs.getInt("petals")));
    }
}

Я делаюне против, если есть другой способ сделать это, без использования RowMapper, мне просто нужно что-то, что заставило бы его работать.

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