Database 와 SQL
👉 Database (데이터의 집합)
# DBMS : ‘Database Management System’ 의 약자로 Database를 관리하고 운영하는 소프트웨어를 의미
# RDBMS : ‘Relational DBMS’의 약자로 관계형 데이터베이스 (열(column)과 행(row)으로 이루어짐)
👉SQL
- ‘Structured Query Language’ 의 약자로 RDBMS에서 사용되는 언어.
# DDL
- ‘Data Definition Language’ 의 약자로 테이블이나 관계의 구조를 생성하는데 사용
- CREATE : 새로운 데이터베이스 및 테이블을 생성
CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
필드이름1 필드타입1,
필드이름2 필드타입2,
...
);
- ALTER : 데이터베이스와 테이블의 내용을 수정
ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
ALTER TABLE 테이블이름 DROP 필드이름;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입;
- DROP : 데이터베이스와 테이블을 삭제. 데이터 및 테이블 전체를 삭제
DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;
- TRUNCATE : 데이터베이스와 테이블을 삭제. 최초 테이블이 만들어졌던 상태 즉, 컬럼값만 남음.
TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;
# DCL
- Data Control Language’ 의 약자로 데이터의 사용 권한을 관리하는데 사용
-GRANT : 사용자 또는 ROLE에 대해 권한을 부여
GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLC} [WITH GRANT OPTION];
//ex
GRANT SELECT ,INSERT
ON mp
TO scott WITH GRANT OPTION;
-REVOKE : 사용자 또는 ROLE에 부여한 권한을 회수
REVOKE { 권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC}
[CASCADE CONSTRAINTS];
//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];
#DML
- ‘Data Manipulation Language’ 의 약자로 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용
- INSERT : 테이블에 새로운 row를 추가
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);
- SELECT : 테이블의 row를 선택
SELECT 필드이름 FROM 테이블이름 [WHERE 조건];
- UPDATE : 테이블의 row의 내용을 수정
UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값;
- DELETE : 테이블의 row를 삭제
DELETE FROM 테이블이름 WHERE 필드이름=데이터값;
JPA(Java Persistence API) 기초
👉 JPA가 하는 일
- 쿼리를 자동으로 만들어 준다.
- 그리고 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 단축.
- 패러다임의 불일치를 해결.
- 특정한 상황을 제외하고는,성능이 높고, 최적화를 위한 노력이 있다.
- 방언도 지원 (h2 Databse를 붙여도, mySql, oracle 뭘 붙여도 코드의 변경은 없다)
# JPA 샘플
- JAVA 클래스
@Entity // DB 테이블 역할을 합니다.
public class User {
// ID가 자동으로 생성 및 증가합니다.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
@Column(unique = true)
private Long kakaoId;
}
- DB 테이블 및 컬럼
- 테이블 형식
👉 Spring Data JPA 이해
- JPA 를 편리하게 사용하기 위해, 스프링에서 JPA 를 Wrapping
- 스프링 개발자들이 JPA 를 사용할 때 필수적으로 생성해야 하나, 예상 가능하고 반복적인 코드들 → Spring Data JPA 가 대신 작성
- Repostiory 인터페이스만 작성하면, 필요한 구현은 스프링이 대신 알아서 척척!
# Spring Data JPA 예제
- 상품 Enitity 선언
@Entity
public class Product extends Timestamped {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long userId;
private String title;
private String image;
private String link;
private int lprice;
private int myprice;
}
- Spring Data JPA) 상품 Repository 생성
public interface ProductRepository extends JpaRepository<Product, Long> {
}
- Spring Data JPA) 기본 제공해 주는 기능
// 1. 상품 생성
Product product = new Product(...);
productRepository.save(product);
// 2. 상품 전체 조회
List<Product> products = productRepository.findAll();
// 3. 상품 전체 개수 조회
long count = productRepository.count();
// 4. 상품 삭제
productRepository.delete(product);
- ID 외의 필드에 대한 추가 기능은 interface 만 선언해 주면, 구현은 Spring Data JPA 가 대신!!
public interface ProductRepository extends JpaRepository<Product, Long> {
// (1) 회원 ID 로 등록된 상품들 조회
List<Product> findAllByUserId(Long userId);
// (2) 상품명이 title 인 관심상품 1개 조회
Product findByTitle(String title);
// (3) 상품명에 word 가 포함된 모든 상품들 조회
List<Product> findAllByTitleContaining(String word);
// (4) 최저가가 fromPrice ~ toPrice 인 모든 상품들을 조회
List<Product> findAllByLpriceBetween(int fromPrice, int toPrice);
}
🙋♂️ 소감 :
JPA를 예전에 다뤄보진 못했어서, 지금은 쿼리문 정도만 이해하고 있다.
편한 기능인거 같기는 한데, 어노테이션이나 모든게 너무 복잡하다...ㅠㅠ
😈 아는 내용이라고 그냥 넘어가지 않기! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2022-12-08(29day) (0) | 2022.12.08 |
---|---|
[TIL] 2022-12-07(28day) (0) | 2022.12.07 |
[TIL] 2022-12-05(26day) (0) | 2022.12.05 |
[TIL] 2022-12-02(25day) (0) | 2022.12.02 |
[TIL] 2022-12-01(24day) (0) | 2022.12.01 |
댓글