Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
51 changes: 41 additions & 10 deletions spring-jdbc-1/initial/src/main/java/cholog/QueryingDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,42 +30,73 @@ public QueryingDAO(JdbcTemplate jdbcTemplate) {
* public <T> T queryForObject(String sql, Class<T> requiredType)
*/
public int count() {
//TODO : customers 디비에 포함되어있는 row가 몇개인지 확인하는 기능 구현
return 0;
int rowCount = jdbcTemplate.queryForObject("select count(*) from customers", Integer.class);
return rowCount;
}

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

/**
* 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 = ?";
//TODO : 주어진 Id에 해당하는 customer를 객체로 반환
return null;

Customer customers = jdbcTemplate.queryForObject(

Choose a reason for hiding this comment

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

queryForObject 함수가 단일 객체를 반환한다는 점에서 customers라는 복수의 이름 대신 customer로 바꿔도 되지 않을까 생각합니다!

sql,
(resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
resultSet.getString("first_name"),
resultSet.getString("last_name")
);
return customer;
}, id);

return customers;
}

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

List<Customer> customers = jdbcTemplate.query(
sql,
(resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
resultSet.getString("first_name"),
resultSet.getString("last_name")
);
return customer;
});

return customers;
}

/**
* 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 = ?";
//TODO : firstName을 기준으로 customer를 list형태로 반환
return null;

final RowMapper<Customer> rowMapper = (resultSet, rowNum) -> {
Customer customer = new Customer(
resultSet.getLong("id"),
resultSet.getString("first_name"),
resultSet.getString("last_name"));
return customer;
};

List<Customer> customers = jdbcTemplate.query(sql,rowMapper, firstName);
return customers;
}
}
20 changes: 16 additions & 4 deletions spring-jdbc-1/initial/src/main/java/cholog/UpdatingDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

import java.sql.PreparedStatement;

import static java.lang.String.valueOf;

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

Choose a reason for hiding this comment

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

  1. Long.valueOf(id) id가 이미 Long type이기 때문에 Long으로 타입을 변환한 이유가 있을까요?
  2. int가 아닌 Integer type으로 받은 이유가 있을까요?

Copy link

@lxeso lxeso Aug 16, 2024

Choose a reason for hiding this comment

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

간결하게 ' return jdbcTemplate.update(sql, id);' 로 가도 괜찮을 것 같습니다!


return affectedRow;
}

/**
Expand All @@ -49,7 +54,14 @@ 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(
sql,
new String[]{"id"});
ps.setString(1, customer.getFirstName());
ps.setString(2, customer.getLastName());
return ps;
}, keyHolder);

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

Expand Down
23 changes: 19 additions & 4 deletions spring-mvc-1/initial/src/main/java/cholog/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@
package cholog;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MemberController {

public String world() {
@GetMapping("/hello")
public String world(@RequestParam(name = "name", required = false) String name, Model model) {
// TODO: /hello 요청 시 resources/templates/static.html 페이지가 응답할 수 있도록 설정하세요.
// TODO: 쿼리 파라미터로 name 요청이 들어왔을 때 해당 값을 hello.html에서 사용할 수 있도록 하세요.
return null;
if (name == null){
// 쿼리 파라미터가 없는 경우
return "static";
} else {
// 쿼리 파라미터가 있는 경우.
model.addAttribute("name", name);
return "hello";
}


}

@GetMapping("/json")
@ResponseBody
public Person json() {
// TODO: /json 요청 시 {"name": "brown", "age": 20} 데이터를 응답할 수 있도록 설정하세요.
return null;
return new Person("brown", 20);
}
}
26 changes: 13 additions & 13 deletions spring-mvc-2/initial/src/main/java/cholog/MemberController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.*;

@Controller
public class MemberController {
Expand All @@ -19,41 +18,42 @@ public class MemberController {
private final AtomicLong index = new AtomicLong(1);

@PostMapping("/members")
public ResponseEntity<Void> create() {
public ResponseEntity<Void> create(@RequestBody Member member) {
// TODO: member 정보를 받아서 생성한다.
Member newMember = Member.toEntity(null, index.getAndIncrement());
Member newMember = Member.toEntity(member, index.getAndIncrement());
members.add(newMember);
return ResponseEntity.created(URI.create("/members/" + newMember.getId())).build();
}

@GetMapping("/members")
public ResponseEntity<List<Member>> read() {
// TODO: 저장된 모든 member 정보를 반환한다.
return null;
return new ResponseEntity<>(members, HttpStatus.OK);
}

@PutMapping("/members/{id}")
public ResponseEntity<Void> update() {
public ResponseEntity<Void> update(@PathVariable Long id, @RequestBody Member newMember) {
// TODO: member의 수정 정보와 url 상의 id 정보를 받아 member 정보를 수정한다.
Member member = members.stream()
.filter(it -> Objects.equals(it.getId(), null))
.filter(it -> Objects.equals(it.getId(), id))
.findFirst()
.orElseThrow(RuntimeException::new);

member.update(null);
member.update(newMember);
//return new ResponseEntity<>(null, HttpStatus.NO_CONTENT); 이건 왜 안되는지?
return null;
}

@DeleteMapping("/members/{id}")
public ResponseEntity<Void> delete() {
public ResponseEntity<Void> delete(@PathVariable Long id) {
// TODO: url 상의 id 정보를 받아 member를 삭제한다.
Member member = members.stream()
.filter(it -> Objects.equals(it.getId(), null))
.filter(it -> Objects.equals(it.getId(), id))
.findFirst()
.orElseThrow(RuntimeException::new);

members.remove(member);

return null;
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}