Я впервые использую 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
, мне просто нужно что-то, что заставило бы его работать.