diff --git a/spring-core-1/initial/src/main/java/cholog/bean/AutowiredBean.java b/spring-core-1/initial/src/main/java/cholog/bean/AutowiredBean.java index 02e1010d..77731101 100644 --- a/spring-core-1/initial/src/main/java/cholog/bean/AutowiredBean.java +++ b/spring-core-1/initial/src/main/java/cholog/bean/AutowiredBean.java @@ -8,6 +8,7 @@ public class AutowiredBean { /* 어떤 방법으로 Component에 Bean을 주입하는지 학습하기 */ + @Autowired private SpringBean springBean; public String sayHello() { diff --git a/spring-core-1/initial/src/main/java/cholog/bean/SpringBean.java b/spring-core-1/initial/src/main/java/cholog/bean/SpringBean.java index 871bf83e..e2490848 100644 --- a/spring-core-1/initial/src/main/java/cholog/bean/SpringBean.java +++ b/spring-core-1/initial/src/main/java/cholog/bean/SpringBean.java @@ -5,6 +5,7 @@ /* 어떤 어노테이션을 붙였을 때 Bean으로 생성되는지 학습하기 */ +@Component public class SpringBean { public String hello() { return "Hello"; diff --git a/spring-core-1/initial/src/main/java/cholog/di/ConstructorInjection.java b/spring-core-1/initial/src/main/java/cholog/di/ConstructorInjection.java index 266e70b1..b9fdca1c 100644 --- a/spring-core-1/initial/src/main/java/cholog/di/ConstructorInjection.java +++ b/spring-core-1/initial/src/main/java/cholog/di/ConstructorInjection.java @@ -6,6 +6,10 @@ public class ConstructorInjection { private InjectionBean injectionBean; + public ConstructorInjection(InjectionBean injectionBean) { + this.injectionBean = injectionBean; + } + /* ConstructorInjection으로 InjectionBean 주입받기 */ diff --git a/spring-core-1/initial/src/main/java/cholog/di/FieldInjection.java b/spring-core-1/initial/src/main/java/cholog/di/FieldInjection.java index b2718b03..8f4ea0de 100644 --- a/spring-core-1/initial/src/main/java/cholog/di/FieldInjection.java +++ b/spring-core-1/initial/src/main/java/cholog/di/FieldInjection.java @@ -9,6 +9,7 @@ public class FieldInjection { /* FieldInjection으로 InjectionBean 주입받기 */ + @Autowired private InjectionBean injectionBean; public String sayHello() { diff --git a/spring-core-1/initial/src/main/java/cholog/di/SetterInjection.java b/spring-core-1/initial/src/main/java/cholog/di/SetterInjection.java index 7dc3f162..422947d6 100644 --- a/spring-core-1/initial/src/main/java/cholog/di/SetterInjection.java +++ b/spring-core-1/initial/src/main/java/cholog/di/SetterInjection.java @@ -14,4 +14,9 @@ public class SetterInjection { public String sayHello() { return injectionBean.hello(); } + + @Autowired + public void setInjectionBean(InjectionBean injectionBean) { + this.injectionBean = injectionBean; + } } diff --git a/spring-core-1/initial/src/main/java/cholog/scan/ContextConfiguration.java b/spring-core-1/initial/src/main/java/cholog/scan/ContextConfiguration.java index ba2e8eb8..1f069516 100644 --- a/spring-core-1/initial/src/main/java/cholog/scan/ContextConfiguration.java +++ b/spring-core-1/initial/src/main/java/cholog/scan/ContextConfiguration.java @@ -1,10 +1,14 @@ package cholog.scan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -@Configuration /* ComponentScan에 대해 학습하고, ComponenetScanBean을 Bean으로 등록하기 */ +@Configuration +@ComponentScan(basePackages = "cholog.scan") public class ContextConfiguration { + } diff --git a/spring-jdbc-1/initial/src/main/java/cholog/QueryingDAO.java b/spring-jdbc-1/initial/src/main/java/cholog/QueryingDAO.java index 6f299728..d28e1e0c 100644 --- a/spring-jdbc-1/initial/src/main/java/cholog/QueryingDAO.java +++ b/spring-jdbc-1/initial/src/main/java/cholog/QueryingDAO.java @@ -31,7 +31,7 @@ public QueryingDAO(JdbcTemplate jdbcTemplate) { */ public int count() { //TODO : customers 디비에 포함되어있는 row가 몇개인지 확인하는 기능 구현 - return 0; + return jdbcTemplate.queryForObject("select count(*) from customers", Integer.class); } /** @@ -39,33 +39,57 @@ public int count() { */ public String getLastName(Long id) { //TODO : 주어진 Id에 해당하는 customers의 lastName을 반환 - return null; + return jdbcTemplate.queryForObject("select last_name from customers where id = ?", String.class, id); } /** * public T queryForObject(String sql, RowMapper rowMapper, @Nullable Object... args) */ public Customer findCustomerById(Long id) { - String sql = "select id, first_name, last_name from customers where id = ?"; //TODO : 주어진 Id에 해당하는 customer를 객체로 반환 - return null; + return jdbcTemplate.queryForObject( + "select id, first_name, last_name from customers where id = ?", + (resultSet, rowNum) -> { + Customer customer = new Customer( + resultSet.getLong("id"), + resultSet.getString("first_name"), + resultSet.getString("last_name") + ); + return customer; + }, id); } /** * public List query(String sql, RowMapper rowMapper) */ public List findAllCustomers() { - String sql = "select id, first_name, last_name from customers"; //TODO : 저장된 모든 Customers를 list형태로 반환 - return null; + return jdbcTemplate.query( + "select id, first_name, last_name from customers", + (resultSet, rowNum) -> { + Customer customer = new Customer( + resultSet.getLong("id"), + resultSet.getString("first_name"), + resultSet.getString("last_name") + ); + return customer; + }); } /** * public List query(String sql, RowMapper rowMapper, @Nullable Object... args) */ public List findCustomerByFirstName(String firstName) { - String sql = "select id, first_name, last_name from customers where first_name = ?"; //TODO : firstName을 기준으로 customer를 list형태로 반환 - return null; + return jdbcTemplate.query( + "select id, first_name, last_name from customers where first_name = ?", + (resultSet, rowNum) -> { + Customer customer = new Customer( + resultSet.getLong("id"), + resultSet.getString("first_name"), + resultSet.getString("last_name") + ); + return customer; + }, firstName); } } diff --git a/spring-jdbc-1/initial/src/main/java/cholog/UpdatingDAO.java b/spring-jdbc-1/initial/src/main/java/cholog/UpdatingDAO.java index e53c21ef..b5cc781d 100644 --- a/spring-jdbc-1/initial/src/main/java/cholog/UpdatingDAO.java +++ b/spring-jdbc-1/initial/src/main/java/cholog/UpdatingDAO.java @@ -33,26 +33,32 @@ public UpdatingDAO(JdbcTemplate jdbcTemplate) { */ public void insert(Customer customer) { //todo: customer를 디비에 저장하기 + jdbcTemplate.update("insert into customers (first_name, last_name) values (?, ?)", + customer.getFirstName(), customer.getLastName()); } /** * public int update(String sql, @Nullable Object... args) */ public int delete(Long id) { //todo: id에 해당하는 customer를 지우고, 해당 쿼리에 영향받는 row 수반환하기 - return 0; + return jdbcTemplate.update("delete from customers where id = ?", Long.valueOf(id)); } /** * public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder) */ public Long insertWithKeyHolder(Customer customer) { - String sql = "insert into customers (first_name, last_name) values (?, ?)"; KeyHolder keyHolder = new GeneratedKeyHolder(); - - //todo : keyHolder에 대해 학습하고, Customer를 저장후 저장된 Customer의 id를 반환하기 + jdbcTemplate.update(connection -> { + PreparedStatement ps = connection.prepareStatement( + "insert into customers (first_name, last_name) values (?, ?)", + new String[]{"id"}); + ps.setString(1, customer.getFirstName()); + ps.setString(2, customer.getLastName()); + return ps; + }, keyHolder); Long id = keyHolder.getKey().longValue(); - - return keyHolder.getKey().longValue(); + return id; } }