티스토리 뷰
● application.yml
- application.yml 설정 파일을 만들어 Spring 서버가 MySQL DB에 접근할 수 있도록 해보자
src/resources/application.yml
spring:
datasource:
url: "jdbc:mysql://localhost/library"
username: "root"
password: "1234"
driver-class-name: com.mysql.cj.jdbc.Driver
==========================================================
datasource : Spring이 가리키는 DB
url : Spring이 붙을 DB 주소
username : 접속 계정 아이디
password : 접속 계정 비번
driver-class-name : DB에 접근할 때 사용할 프로그램
● CREATE TABLE USER
CREATE TABLE USER (
ID BIGINT AUTO_INCREMENT,
NAME VARCHAR(25),
AGE INT,
PRIMARY KEY(ID)
);
● POST API, GET API 변경
- 메모리를 사용하지말고 MySQL을 이용하도록 변경해보자
[기존]
@RestController
public class UserController {
private final List<User> users = new ArrayList<User>();
@PostMapping("/user")
public void saveUser(@RequestBody UserCreateRequest request) {
users.add(new User(request.getName(), request.getAge()));
}
@GetMapping("/user")
public List<UserResponse> getUsers() {
List<UserResponse> responses = new ArrayList<>();
for (int i = 0; i < this.users.size(); i++) {
responses.add(new UserResponse((i + 1), users.get(i)));
}
return responses;
}
}
[변경]
- jdbcTemplate을 이용해 SQL을 날릴 수 있게 됐다.
- UserController의 생성자를 통해 jdbcTemplate을 parameter로 넣어주면 자동으로 들어온다. by Spring(자세한건 나중에)
1. POST API 참고사항
- jdbcTemplate.update( ) 메소드는 INSERT, UPDATE, DELETE 쿼리에 사용할 수 있다.
- jdbcTemplate.update의 update는 SQL의 UPDATE를 의미하는게 아니라 데이터의 변경을 의미한다.
- 그래서 INSERT, UPDATE, DELETE 쿼리에 모두 사용할 수 있다.
2. GET API 참고사항
jdbcTemplate.query(sql, RowMapper 구현 익명클래스)
- RowMapper는 쿼리의 결과를 받아 객체를 반환한다.
- ResultSet의 getType(“필드이름”)을 사용해 실제 값을 가져올 수 있다.
cf) 익명클래스 = 프로그램에서 일시적으로 사용되고 버려지는 객체
[최종]
@RestController
public class UserController {
// JdbcTemplate를 이용해 DB에 접근한다.
private final JdbcTemplate jdbcTemplate;
// jdbcTemplate을 생성자에 직접 넣어주지 않아도 spring이 알아서 jdbcTemplate을 넣어준다.
public UserController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@PostMapping("/user")
public void saveUser(@RequestBody UserCreateRequest request) {
String sql = "INSERT INTO USER (NAME, AGE) VALUES (?, ?)";
jdbcTemplate.update(sql, request.getName(), request.getAge());
}
@GetMapping("/user")
public List<UserResponse> getUsers() {
String sql = "SELECT * FROM USER";
return jdbcTemplate.query(sql, new RowMapper<UserResponse>() {
// mapRow : SELECT 쿼리를 통해 가져온 유저 데이터를 UserResponse로 바꿔주는 함수
@Override
public UserResponse mapRow(ResultSet rs, int rowNum) throws SQLException {
// ResultSet = 결과
long id = rs.getLong("id");
String name = rs.getString("name");
int age = rs.getInt("age");
return new UserResponse(id, name, age);
}
});
}
}
package com.group.libraryapp.dto.user.response;
import com.group.libraryapp.domain.user.User;
public class UserResponse {
private long id;
private String name;
private Integer age;
// 아래의 생성자를 새로 추가했다.
public UserResponse(long id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public UserResponse(long id, User user) {
this.id = id;
this.name = user.getName();
this.age = user.getAge();
}
public long getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
cf) lambda를 이용해 더 간결하게 작성할 수 있다.
@GetMapping("/user")
public List<UserResponse> getUsers() {
String sql = "SELECT * FROM USER";
return jdbcTemplate.query(sql, (rs, rowNum) -> {
long id = rs.getLong("id");
String name = rs.getString("name");
int age = rs.getInt("age");
return new UserResponse(id, name, age);
});
}
- 잘 됨
cf)
'Backend > Spring' 카테고리의 다른 글
#15 MySQL - UPDATE API, DELETE API (0) | 2023.08.19 |
---|---|
#14 application.yml 설정 시 주의사항 (0) | 2023.08.17 |
#12 MySQL - CRUD with DML (0) | 2023.08.14 |
#11 MySQL - CREATE TABLE (0) | 2023.08.13 |
#10 유저 조회 API (0) | 2023.08.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- 코딩테스트
- git
- Advanced Stream
- SQL
- 메모리
- API
- OS
- Spring Boot
- SpringBoot
- 운영체제
- 자료구조
- 빅데이터 분석기사
- nosql
- node.js
- 프로세스
- Stream
- db
- 빅데이터
- Phaser3
- Java8
- MongoDB
- 프로그래머스
- Phaser
- 알고리즘
- 코테
- spring
- DART
- MySQL
- jpa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함