Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- server
- Camera Zoom
- springboot
- screencapture
- SDK upgrade
- Spring Boot
- spread 연산자
- Google Refund
- Packet Network
- mongoDB
- docker
- rpg server
- draganddrop
- java
- Google Developer API
- express
- Camera Movement
- react
- Unity IAP
- --watch
- Unity Editor
- Digital Ocean
- Git
- css framework
- linux
- nodejs
- unity
- MySQL
- critical rendering path
- OverTheWire
Archives
- Today
- Total
우당탕탕 개발일지
[SpringBoot] 2. MySQL 연결하기 본문
Database 기본
mysql 에 접속한다. 터미널을 열고,
mysql -u root -p
사용가능한 명령어들을 알아보자.
아래 언어들은 DDL (Data Definition Language) 라고한다.
create database [name]; ##데이터베이스 생성
show databases; ##데이터베이스 목록보기
drop database [name]; ##데이터베이스 삭제
use [database-name]; ## 데이터베이스 접속
## 데이터베이스 안으로 들어왔음.
show tables; ##테이블 조회
create table [테이블 이름](
[필드이름] [타입] [부가조건],
...
primary key ([필드이름])
);
]
drop table [테이블이름]; ##테이블 제거
SQL 을 알아보자
CRUD (Create, Read, Update, Delete) : 특정데이터를 생성,조회,갱신,삭제하는 데이터 관리 관련된 명령어들이다.
insert into [테이블이름] (필드1,필드2,...) values (값1, 값2); ## 순서가 중요함 필드1-값1 이 매칭된다.
select * from [테이블이름]
select 필드1,필드2 from [테이블이름]
select * from [테이블이름] where 필드1 = 값1;
select * from 테이블 where 필드1 = 값1 and 필드2 != 값2;
select * from 테이블 where 필드1 = 값1 or 필드1 <= 값2;
select * from 테이블 where 필드1 between 값1 and 값2; ##값1<=필드1 <=값2 인 조건만 찾음
select * from 테이블 where 필드1 in (값1, 값2) ##값1,값2 에 포함되는 것만
select * from 테이블 where 필드1 not in (값1, 값2) ##값1,값2 에 포함되지 않는 것만
## 조건이 없으면 모든 데이터의 값이 변경됨. 주의할것
update 테이블 set 필드1=값1, 필드2=값2 where 조건
update 테이블 set 가격 = 1500 where name = '사과'; ##사과를 1500원으로 변경
## 조건이 없으면 모든 데이터가 삭제됨. 주의할것
delete from 테이블 where 조건;
delete from 테이블 where 가격 =1500;
Spring 에서 Database 사용하기
build.gradle에 다음 파일을 추가 및 sync
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
implementation 'org.springframework:spring-jdbc:5.3.30' // Spring JDBC
main>resources>application.yaml 파일제작
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database_name
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
UserController
에서 db에 접근하기 위해서는 jdbcTemplate을 사용한다. 컨트롤러 생성자에 jdbcTemplate을 넣으면 자동으로 들어와진다. 다음은 UserController
전문이다.
생성자로부터 jdbcTemplate을 가져와서 query, update 등의 함수를 호출하는 것을 볼 수 있다.
@RestController
public class UserController {
private final JdbcTemplate jdbcTemplate;
public UserController(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
@PostMapping("/user")
public void saveUser(@RequestBody UserCreateRequest request){
String sql = "insert info 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, (rs, rowNum) -> {
long id = rs.getLong("id");
String name = rs.getString("name");
int age = rs.getInt("age");
return new UserResponse(id,name,age);
});
}
@PutMapping("/user")
public void updateUser(@RequestBody UserUpdateRequest request){
String querySQL = "select * from user where id = ?";
boolean isUserNotExist = jdbcTemplate.query(querySQL, (res,rowNum)->0,request.getId()).isEmpty();
if(!isUserNotExist) throw new IllegalArgumentException("invalid id");
String sql = "update user set name = ? where id= ?";
jdbcTemplate.update(sql,request.getName(), request.getId());
}
@DeleteMapping("/user")
public void deleteUser(@RequestParam String name){
String querySQL = "select * from user where name = ?";
boolean isUserNotExist = jdbcTemplate.query(querySQL, (res,rowNum)->0,name).isEmpty();
if(!isUserNotExist) throw new IllegalArgumentException("invalid id");
String sql = "delete from user where name = ?";
jdbcTemplate.update(sql,name );
}
}
getUsers()
API에서, query를 이용해 모든 유저의 리스트를 가져오는 부분을 볼 수 있다. 반복적으로 돌면서 원하는 작업을 할 수 있고, 결과물은 List<> 형태로 반환한다. 위 코드에서는 람다식으로 적혀있다.
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);
일반식으로 변경할 경우 아래처럼 된다.
jdbcTemplate.query(sql, new RowMapper<UserResponse>(){
@Override
public UserResponse mapRow(ResultSet rs, int rowNum) throws SQLException{
long id = rs.getLong("id");
String name = rs.getString("name");
int age = rs.getInt("age");
return new UserResponse(id,name,age);
}
});
다음엔 이 UserController를 3가지 파일로 분리하여 리팩토링 하는 방법을 알아보자.
https://journal-devchop.tistory.com/59
'Server' 카테고리의 다른 글
[SpringBoot] vscode 에서 import ... not exist 현상 (0) | 2025.01.06 |
---|---|
[SpringBoot] 3. 리팩토링 & 스프링 컨테이너 (0) | 2025.01.05 |
[SpringBoot] 1. spring boot 시작하기 (1) | 2025.01.03 |
[SpringBoot] Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM. (0) | 2025.01.02 |
[nestJs] digital ocean 에 웹클라이언트 & 서버 배포하기 (0) | 2024.12.25 |