mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-07-17 21:15:50 +00:00
Update JdbcVisitRepository, JdbcVisitRepositoryExt implementations
This commit is contained in:
parent
aaaddf196f
commit
587a5c5e1d
2 changed files with 47 additions and 12 deletions
|
@ -1,6 +1,9 @@
|
|||
package org.springframework.samples.petclinic.repository.jdbc;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -10,7 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import org.springframework.orm.ObjectRetrievalFailureException;
|
||||
import org.springframework.samples.petclinic.model.Visit;
|
||||
|
@ -21,12 +24,11 @@ import org.springframework.stereotype.Repository;
|
|||
@Qualifier("VisitRepositoryExt")
|
||||
public class JdbcVisitRepositoryExtImpl extends JdbcVisitRepositoryImpl implements VisitRepositoryExt {
|
||||
|
||||
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
|
||||
protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;
|
||||
|
||||
@Autowired
|
||||
public JdbcVisitRepositoryExtImpl(DataSource dataSource) {
|
||||
super(dataSource);
|
||||
// TODO Auto-generated constructor stub
|
||||
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
|
||||
}
|
||||
|
||||
|
@ -37,9 +39,9 @@ public class JdbcVisitRepositoryExtImpl extends JdbcVisitRepositoryImpl implemen
|
|||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
visit = this.namedParameterJdbcTemplate.queryForObject(
|
||||
"SELECT id, pet_id, visit_date, description FROM visits WHERE id= :id",
|
||||
"SELECT id as visit_id, pet_id, visit_date, description FROM visits WHERE id= :id",
|
||||
params,
|
||||
BeanPropertyRowMapper.newInstance(Visit.class));
|
||||
new JdbcVisitRowMapperExt());
|
||||
} catch (EmptyResultDataAccessException ex) {
|
||||
throw new ObjectRetrievalFailureException(Visit.class, id);
|
||||
}
|
||||
|
@ -50,9 +52,22 @@ public class JdbcVisitRepositoryExtImpl extends JdbcVisitRepositoryImpl implemen
|
|||
public Collection<Visit> findAll() throws DataAccessException {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
return this.namedParameterJdbcTemplate.query(
|
||||
"SELECT id, pet_id, visit_date, description FROM visits",
|
||||
"SELECT id as visit_id, pets.id as pet_id, visit_date, description FROM visits LEFT JOIN pets ON visits.pet_id = pets.id",
|
||||
params,
|
||||
BeanPropertyRowMapper.newInstance(Visit.class));
|
||||
new JdbcVisitRowMapperExt());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(Visit visit) throws DataAccessException {
|
||||
if (visit.isNew()) {
|
||||
Number newKey = this.insertVisit.executeAndReturnKey(
|
||||
createVisitParameterSource(visit));
|
||||
visit.setId(newKey.intValue());
|
||||
} else {
|
||||
this.namedParameterJdbcTemplate.update(
|
||||
"UPDATE visits SET visit_date=:visit_date, description=:description, pet_id=:pet_id WHERE id=:id ",
|
||||
createVisitParameterSource(visit));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -62,4 +77,24 @@ public class JdbcVisitRepositoryExtImpl extends JdbcVisitRepositoryImpl implemen
|
|||
this.namedParameterJdbcTemplate.update("DELETE FROM visits WHERE id=:id", params);
|
||||
}
|
||||
|
||||
protected class JdbcVisitRowMapperExt implements RowMapper<Visit>{
|
||||
|
||||
@Override
|
||||
public Visit mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
Visit visit = new Visit();
|
||||
JdbcPet pet = new JdbcPet();
|
||||
visit.setId(rs.getInt("visit_id"));
|
||||
Date visitDate = rs.getDate("visit_date");
|
||||
visit.setDate(new Date(visitDate.getTime()));
|
||||
visit.setDescription(rs.getString("description"));
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", rs.getInt("pet_id"));
|
||||
pet = JdbcVisitRepositoryExtImpl.this.namedParameterJdbcTemplate.
|
||||
queryForObject("SELECT pets.id, name, birth_date, type_id, owner_id FROM pets WHERE pets.id=:id",
|
||||
params,
|
||||
new JdbcPetRowMapper());
|
||||
visit.setPet(pet);
|
||||
return visit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ public class JdbcVisitRepositoryImpl implements VisitRepository {
|
|||
|
||||
private NamedParameterJdbcTemplate jdbcTemplate;
|
||||
|
||||
private SimpleJdbcInsert insertVisit;
|
||||
protected SimpleJdbcInsert insertVisit;
|
||||
|
||||
@Autowired
|
||||
public JdbcVisitRepositoryImpl(DataSource dataSource) {
|
||||
|
@ -75,7 +75,7 @@ public class JdbcVisitRepositoryImpl implements VisitRepository {
|
|||
/**
|
||||
* Creates a {@link MapSqlParameterSource} based on data values from the supplied {@link Visit} instance.
|
||||
*/
|
||||
private MapSqlParameterSource createVisitParameterSource(Visit visit) {
|
||||
protected MapSqlParameterSource createVisitParameterSource(Visit visit) {
|
||||
return new MapSqlParameterSource()
|
||||
.addValue("id", visit.getId())
|
||||
.addValue("visit_date", visit.getDate())
|
||||
|
|
Loading…
Reference in a new issue