From 74eb3e72fe825a2ec2139225260c20e495e7226c Mon Sep 17 00:00:00 2001
From: Mic <misvy@vmware.com>
Date: Thu, 31 Jan 2013 21:57:19 +0800
Subject: [PATCH] removing JdbcTemplate so we use NamedParameterJdbcTemplate
 solely when possible

---
 .../jdbc/JdbcOwnerRepositoryImpl.java         | 54 +++++++++++--------
 .../jdbc/JdbcPetRepositoryImpl.java           | 27 ++++++----
 .../jdbc/JdbcVisitRepositoryImpl.java         |  2 +-
 .../petclinic/web/OwnerController.java        |  3 +-
 src/main/webapp/WEB-INF/petclinic-servlet.xml |  1 +
 5 files changed, 50 insertions(+), 37 deletions(-)

diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcOwnerRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcOwnerRepositoryImpl.java
index 6a3f558e..90f9dd1d 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcOwnerRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcOwnerRepositoryImpl.java
@@ -1,14 +1,15 @@
 package org.springframework.samples.petclinic.repository.jdbc;
 
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.sql.DataSource;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.EmptyResultDataAccessException;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
@@ -19,7 +20,6 @@ import org.springframework.samples.petclinic.Pet;
 import org.springframework.samples.petclinic.PetType;
 import org.springframework.samples.petclinic.Visit;
 import org.springframework.samples.petclinic.repository.OwnerRepository;
-import org.springframework.samples.petclinic.repository.PetRepository;
 import org.springframework.samples.petclinic.repository.VisitRepository;
 import org.springframework.samples.petclinic.util.EntityUtils;
 import org.springframework.stereotype.Service;
@@ -39,14 +39,8 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 public class JdbcOwnerRepositoryImpl implements OwnerRepository {
 
-	@Autowired
-	private PetRepository petRepository;
-	
-	@Autowired
 	private VisitRepository visitRepository;
 	
-	@Autowired
-	private JdbcTemplate jdbcTemplate;
 	
 	@Autowired
 	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@@ -54,11 +48,16 @@ public class JdbcOwnerRepositoryImpl implements OwnerRepository {
 	private SimpleJdbcInsert insertOwner;
 
 	@Autowired
-	public void init(DataSource dataSource) {
+	public JdbcOwnerRepositoryImpl(DataSource dataSource, NamedParameterJdbcTemplate namedParameterJdbcTemplate, 
+				VisitRepository visitRepository) {
 
 		this.insertOwner = new SimpleJdbcInsert(dataSource)
 			.withTableName("owners")
 			.usingGeneratedKeyColumns("id");
+		
+		this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
+
+		this.visitRepository = visitRepository;
 	}
 
 
@@ -72,10 +71,13 @@ public class JdbcOwnerRepositoryImpl implements OwnerRepository {
 	 */
 	@Transactional(readOnly = true)
 	public Collection<Owner> findByLastName(String lastName) throws DataAccessException {
-		List<Owner> owners = this.jdbcTemplate.query(
-				"SELECT id, first_name, last_name, address, city, telephone FROM owners WHERE last_name like ?",
-				ParameterizedBeanPropertyRowMapper.newInstance(Owner.class),
-				lastName + "%");
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("lastName", lastName + "%");
+		List<Owner> owners = this.namedParameterJdbcTemplate.query(
+				"SELECT id, first_name, last_name, address, city, telephone FROM owners WHERE last_name like :lastName",
+				params, 
+				ParameterizedBeanPropertyRowMapper.newInstance(Owner.class)
+				);
 		loadOwnersPetsAndVisits(owners);
 		return owners;
 	}
@@ -89,10 +91,13 @@ public class JdbcOwnerRepositoryImpl implements OwnerRepository {
 	public Owner findById(int id) throws DataAccessException {
 		Owner owner;
 		try {
-			owner = this.jdbcTemplate.queryForObject(
-					"SELECT id, first_name, last_name, address, city, telephone FROM owners WHERE id=?",
-					ParameterizedBeanPropertyRowMapper.newInstance(Owner.class),
-					id);
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put("id", id);
+			owner = this.namedParameterJdbcTemplate.queryForObject(
+					"SELECT id, first_name, last_name, address, city, telephone FROM owners WHERE id= :id",
+					params,
+					ParameterizedBeanPropertyRowMapper.newInstance(Owner.class)
+					);
 		}
 		catch (EmptyResultDataAccessException ex) {
 			throw new ObjectRetrievalFailureException(Owner.class, new Integer(id));
@@ -102,10 +107,13 @@ public class JdbcOwnerRepositoryImpl implements OwnerRepository {
 	}
 	
 	public void loadPetsAndVisits(final Owner owner) {
-		final List<JdbcPet> pets = this.jdbcTemplate.query(
-				"SELECT id, name, birth_date, type_id, owner_id FROM pets WHERE owner_id=?",
-				new JdbcPetRowMapper(),
-				owner.getId().intValue());
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("id", owner.getId().intValue());
+		final List<JdbcPet> pets = this.namedParameterJdbcTemplate.query(
+				"SELECT id, name, birth_date, type_id, owner_id FROM pets WHERE owner_id=:id",
+				params,
+				new JdbcPetRowMapper()
+				);
 		for (JdbcPet pet : pets) {
 			owner.addPet(pet);
 			pet.setType(EntityUtils.getById(getPetTypes(), PetType.class, pet.getTypeId()));
@@ -139,8 +147,8 @@ public class JdbcOwnerRepositoryImpl implements OwnerRepository {
 	
 	@Transactional(readOnly = true)
 	public Collection<PetType> getPetTypes() throws DataAccessException {
-		return this.jdbcTemplate.query(
-				"SELECT id, name FROM types ORDER BY name",
+		return this.namedParameterJdbcTemplate.query(
+				"SELECT id, name FROM types ORDER BY name", new HashMap<String,Object>(),
 				ParameterizedBeanPropertyRowMapper.newInstance(PetType.class));
 	}
 
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java
index a2a00452..5c92c250 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java
@@ -1,13 +1,14 @@
 package org.springframework.samples.petclinic.repository.jdbc;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.sql.DataSource;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.EmptyResultDataAccessException;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
@@ -35,40 +36,44 @@ import org.springframework.stereotype.Repository;
 @Repository
 public class JdbcPetRepositoryImpl implements PetRepository {
 
-	private JdbcTemplate jdbcTemplate;
 	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
 
 	private SimpleJdbcInsert insertPet;
 	
-	@Autowired
 	private OwnerRepository ownerRepository;
 	
-	@Autowired
 	private VisitRepository visitRepository;
+	
 
 	@Autowired
-	public void init(DataSource dataSource) {
-		this.jdbcTemplate = new JdbcTemplate(dataSource);
+	public JdbcPetRepositoryImpl(DataSource dataSource, OwnerRepository ownerRepository, VisitRepository visitRepository) {
 		this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
 
 		this.insertPet = new SimpleJdbcInsert(dataSource)
 			.withTableName("pets")
 			.usingGeneratedKeyColumns("id");
+		
+		this.ownerRepository = ownerRepository;
+		this.visitRepository = visitRepository;
 	}
 
 	public List<PetType> findPetTypes() throws DataAccessException {
-		return this.jdbcTemplate.query(
+		Map<String, Object> params = new HashMap<String,Object>();
+		return this.namedParameterJdbcTemplate.query(
 				"SELECT id, name FROM types ORDER BY name",
+				params,
 				ParameterizedBeanPropertyRowMapper.newInstance(PetType.class));
 	}
 
 	public Pet findById(int id) throws DataAccessException {
 		JdbcPet pet;
 		try {
-			pet = this.jdbcTemplate.queryForObject(
-					"SELECT id, name, birth_date, type_id, owner_id FROM pets WHERE id=?",
-					new JdbcPetRowMapper(),
-					id);
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put("id", id);
+			pet = this.namedParameterJdbcTemplate.queryForObject(
+					"SELECT id, name, birth_date, type_id, owner_id FROM pets WHERE id=:id",
+					params,
+					new JdbcPetRowMapper());
 		}
 		catch (EmptyResultDataAccessException ex) {
 			throw new ObjectRetrievalFailureException(Pet.class, new Integer(id));
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java
index c54eb108..52519eec 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java
@@ -39,7 +39,7 @@ public class JdbcVisitRepositoryImpl implements VisitRepository {
 	private SimpleJdbcInsert insertVisit;
 
 	@Autowired
-	public void init(DataSource dataSource) {
+	public JdbcVisitRepositoryImpl(DataSource dataSource) {
 		this.jdbcTemplate = new JdbcTemplate(dataSource);
 
 		this.insertVisit = new SimpleJdbcInsert(dataSource)
diff --git a/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java
index a7f760a9..77bf6b57 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java
@@ -66,8 +66,7 @@ public class OwnerController {
 	
 	@RequestMapping(value = "/owners/find", method = RequestMethod.GET)
 	public String initFindForm(Model model) {
-		model.addAttribute("owner", new Owner());
-		return "owners/findOwners";
+		throw new RuntimeException("aaaaaaa");
 	}
 
 	@RequestMapping(value = "/owners", method = RequestMethod.GET)
diff --git a/src/main/webapp/WEB-INF/petclinic-servlet.xml b/src/main/webapp/WEB-INF/petclinic-servlet.xml
index 299409a4..dbb255a2 100644
--- a/src/main/webapp/WEB-INF/petclinic-servlet.xml
+++ b/src/main/webapp/WEB-INF/petclinic-servlet.xml
@@ -94,6 +94,7 @@
 	-->
 	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
 		<property name="defaultErrorView" value="exception"/>
+		<property name="warnLogCategory" value="warn"/>
 	</bean>
 
 
-- 
GitLab