Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 13 additions & 25 deletions spring-jdbc-1/src/main/java/cholog/QueryingDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public QueryingDAO(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

/*
private final RowMapper<Customer> actorRowMapper = (resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
Expand All @@ -22,62 +23,49 @@ public QueryingDAO(JdbcTemplate jdbcTemplate) {
);
return customer;
};
추후 rowMapper에 대해 학습해보고 이용해보기
*/

/**
* public <T> T queryForObject(String sql, Class<T> requiredType)
*/
public int count() {
String sql = "select count(*) from customers";
return jdbcTemplate.queryForObject(sql, Integer.class);
//TODO : customers 디비에 포함되어있는 row가 몇개인지 확인하는 기능 구현
return 0;
}

/**
* public <T> T queryForObject(String sql, Class<T> requiredType, @Nullable Object... args)
*/
public String getLastName(Long id) {
String sql = "select last_name from customers where id = ?";
return jdbcTemplate.queryForObject(sql, String.class, id);
//TODO : 주어진 Id에 해당하는 customers의 lastName을 반환
return null;
}

/**
* public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
*/
public Customer findCustomerById(Long id) {
String sql = "select id, first_name, last_name from customers where id = ?";
return jdbcTemplate.queryForObject(
sql,
(resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
resultSet.getString("first_name"),
resultSet.getString("last_name")
);
return customer;
}, id);
//TODO : 주어진 Id에 해당하는 customer를 객체로 반환
return null;
}

/**
* public <T> List<T> query(String sql, RowMapper<T> rowMapper)
*/
public List<Customer> findAllCustomers() {
String sql = "select id, first_name, last_name from customers";
return jdbcTemplate.query(
sql,
(resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
resultSet.getString("first_name"),
resultSet.getString("last_name")
);
return customer;
});
//TODO : 저장된 모든 Customers를 list형태로 반환
return null;
}

/**
* public <T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
*/
public List<Customer> findCustomerByFirstName(String firstName) {
String sql = "select id, first_name, last_name from customers where first_name = ?";
return jdbcTemplate.query(sql, actorRowMapper, firstName);
//TODO : firstName을 기준으로 customer를 list형태로 반환
return null;
}
}
21 changes: 8 additions & 13 deletions spring-jdbc-1/src/main/java/cholog/UpdatingDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public UpdatingDAO(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

/*
private final RowMapper<Customer> actorRowMapper = (resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
Expand All @@ -24,37 +25,31 @@ public UpdatingDAO(JdbcTemplate jdbcTemplate) {
);
return customer;
};
추후 rowMapper에 대해 학습해보고 이용해보기
*/

/**
* public int update(String sql, @Nullable Object... args)
*/
public void insert(Customer customer) {
String sql = "insert into customers (first_name, last_name) values (?, ?)";
jdbcTemplate.update(sql, customer.getFirstName(), customer.getLastName());
//todo: customer를 디비에 저장하기
}
/**
* public int update(String sql, @Nullable Object... args)
*/
public int delete(Long id) {
String sql = "delete from customers where id = ?";
return jdbcTemplate.update(sql, Long.valueOf(id));
//todo: id에 해당하는 customer를 지우고, 해당 쿼리에 영향받는 row 수반환하기
return 0;
}

/**
* 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();
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);

//todo : keyHolder에 대해 학습하고, Customer를 저장후 저장된 Customer의 id를 반환하기

Long id = keyHolder.getKey().longValue();

Expand Down
14 changes: 11 additions & 3 deletions spring-jdbc-1/src/test/java/cholog/QueryingDaoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ void setUp() {
jdbcTemplate.execute("CREATE TABLE customers(" +
"id SERIAL, first_name VARCHAR(255), last_name VARCHAR(255))");

List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long").stream()
.map(name -> name.split(" "))
.collect(Collectors.toList());
List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long")
.stream()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분 줄바꿈의 이유가 있으신가요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 별다른 이유는 없고, 무의식적으로 한 줄에 점 하나 쓰는 습관이 있어서 바꾼 것 같습니다.

.map(name -> name.split(" "))
.collect(Collectors.toList());

jdbcTemplate.batchUpdate("INSERT INTO customers(first_name, last_name) VALUES (?,?)", splitUpNames);
}
Expand Down Expand Up @@ -62,4 +63,11 @@ void findAllCustomers() {

assertThat(customers).hasSize(4);
}

@Test
void findCustomerByFirstName() {
List<Customer> customers = queryingDAO.findCustomerByFirstName("Josh");

assertThat(customers).hasSize(2);
}
}