μΆμ² : λ΄μΌλ°°μμΊ ν
JPA
μΆκ°νλ κΈ°λ₯
- κ΄μ¬μν λͺ©λ‘ νμ΄μ§ λ° μ λ ¬ κ°λ₯
- ν΄λ μμ± λ° μ‘°ν κ°λ₯
- κ΄μ¬μνμ ν΄λ μΆκ° κΈ°λ₯
- ν΄λ λ³ κ΄μ¬μν μ‘°ν κ°λ₯
νμ΄μ§ κΈ°λ₯ : Springframwork.data.domain Page ꡬν체
κΈ°λ₯ | λ©μλ | URL | μμ² | μλ΅ |
λ©μΈνμ΄μ§ | GET | /api/shop | index.html | |
ν€μλλ‘ μν κ²μνκ³ κ²°κ³Όλ₯Ό λͺ©λ‘μΌλ‘ νμ | GET | /api/search?query=κ²μμ΄ | [ { "title" : String, "link" : String, ”image” : String, "lprice" : int }, …] |
|
κ΄μ¬μν λ±λ‘ | POST | /api/products | Header Authorization : Bearer <JWT> { "title" : String, "image" : String, "link" : String, "lprice" : int } |
{ ”id” : Long "title" : String, "link" : String, ”image” : String, "lprice" : int, "myprice" : int } |
κ΄μ¬μν μ‘°ν | GET | /api/products? sortBy=String&isAsc=boolean&size=int&page=int |
Header Authorization : Bearer <JWT> |
Page<Product> -> νμ΄μ§ (Dto λ°νλ κ°λ₯ : 볡μ‘ν¨) |
κ΄μ¬μν μ΅μ κ° λ±λ‘ | PUT | /api/products/{id} | Header Authorization :Bearer <JWT> { "myprice" : int, } |
id |
ν΄λ μ€κ³
-> ν΄λ λ³λ‘ κ΄μ¬μνμ μ μ₯/κ΄λ¦¬ν μ μλ κΈ°λ₯ μΆκ°
μꡬμ¬ν
- νμλ³ ν΄λλ₯Ό μΆκ°ν μ μλ€.
- ν΄λλ₯Ό μΆκ°ν λ 1κ°~Nκ°λ₯Ό νλ²μ μΆκ°ν μ μλ€.
κ΄μ¬μνμ ν΄λ μ€μ
- κ΄μ¬μνμ ν΄λλ Nκ° μ€μ ν μ μλ€.
- κ΄μ¬μνμ΄ λ±λ‘λλ μμ μλ μ΄λ ν΄λμλ μ μ₯λμ§ μλλ€.
- κ΄μ¬μν λ³λ‘ 1λ²μμ μμ±ν ν΄λλ₯Ό μ ννμ¬ μΆκ°ν μ μλ€.
ν΄λλ³ μ‘°ν
- νμμ ν΄λ λ³λ‘ κ΄μ¬μν μ‘°νκ° κ°λ₯νλ€.
- μ‘°ν λ°©λ²
'μ 체' ν΄λ¦ μ: ν΄λμ μκ΄ μμ΄ νμμ΄ μ μ₯ν μ 체 κ΄μ¬μνλ€μ μ‘°ν κ°λ₯νλ€.
'ν΄λλͺ ' ν΄λ¦ μ: ν΄λλ³ μ μ₯λ κ΄μ¬μνλ€μ μ‘°ν κ°λ₯νλ€.
ν΄λ ν μ΄λΈ μ€κ³
- ν΄λλͺ : νμμ΄ λ±λ‘ν ν΄λ μ΄λ¦μ μ μ₯
- νμID: ν΄λλ₯Ό λ±λ‘ν νμμ ID λ₯Ό μ μ₯
- A νμμ΄ μμ±ν ν΄λλ A νμμκ²λ§ 보μ¬μΌ ν¨
- νμκ³Ό ν΄λμ κ΄κ³
- 'νμκ³Ό ν΄λ'μ κ΄κ³λ 'νμκ³Ό κ΄μ¬μν' κ΄κ³μ λμΌ
κΈ°μ‘΄ κ΄κ³μ€μ λ°©λ²μΌλ‘λ User μν°ν°μ Idκ° Folder μν°ν°μ UserIDμΈμ§ λ°λ‘ μ μ μλ€.
@Entity
public class Folder {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Long userId;
}
Folder μν°ν°μ DBμμ νμκ³Ό μνμ κ΄κ³λ₯Ό μ μ μλ€.
νμ -> ν΄λ μ‘°ν
- νμλ³ μ‘°ν
// 1. λ‘κ·ΈμΈν νμ (user1) μ id λ₯Ό μ‘°ν
Long userId = user1.getId();
// 2. userId λ‘ μ μ₯λ λͺ¨λ folder μ‘°ν
List<Folder> folders = folderRepository.findAllByUserId(userId);
ν΄λ -> νμ μ‘°ν
// 1. folder1 μ userId λ₯Ό μ‘°ν
Long userId = folder1.getUserId();
// 2. userId λ‘ μ μ₯λ νμ μ‘°ν
User user = userRepository.findById(userId);
=> μλ°©ν₯ μ°κ΄κ΄κ³ μ€μ !
User μν°ν° : @OneToMany
public class User {
@OneToMany
private List<Folder> folders;
}
Folder μν°ν° :@ManyToOne
public class Folder{
@ManyToOne
private User user;
}
ν΄λμ μμ± λ° μ‘°ν ꡬν
- νμλ³ ν΄λλ₯Ό μΆκ°ν μ μλ€.
- ν΄λλ₯Ό μΆκ°ν λ 1κ°~Nκ°λ₯Ό νλ²μ μΆκ°ν μ μλ€.
κΈ°λ₯ | λ©μλ λ° URL | μμ² | μλ΅ |
ν΄λ μμ± | POST, /api/folders | { folderNames: [String, ...] } |
[String...] |
ν΄λ μ‘°ν | GET, /api/user-folder | index.html model μΆκ° -> folders |
ν΄λ λ³λ‘ κ΄μ¬μνμ λ΄λ κΈ°λ₯
- κ΄μ¬μνμ ν΄λλ₯Ό 0κ° ~ Nκ° μ€μ ν μ μλ€.
- κ΄μ¬μνμ΄ λ±λ‘λλ μμ μλ μ΄λ ν΄λμλ μ μ₯λμ§ μλλ€.
- κ΄μ¬μν λ³λ‘ κΈ° μμ± νλ ν΄λλ₯Ό μ ννμ¬ μΆκ°ν μ μλ€.
- ν΄λμ μνμ μ°κ΄ κ΄κ³λ?
- μν 1κ°μ μ¬λ¬κ°μ ν΄λ μ μ₯ κ°λ₯
- ν΄λ 1κ°μ μ¬λ¬κ°μ μν μ μ₯ κ°λ₯
- κ²°λ‘ μ μΌλ‘
- μν : ν΄λ = N : N
κΈ°λ₯ | λ©μλ, URL | μμ² | μλ΅ |
ν΄λ μ 체 μ‘°ν | GET, /api/folders | [ { id : int, name : String, user : { id : int, username : String, password : String, email : String, role : String, folders : [] } } …] |
|
κ΄μ¬μνμ ν΄λμ λ΄κΈ° | POST, /api/products/{productId}/folder | {productId] : κ΄μ¬μν ID [Form νν] folderId : μΆκ°ν ν΄λ ID |
ν΄λκ° μΆκ°λ κ΄μ¬μν ID |
ν΄λλ³ κ΄μ¬μν μ‘°ν ꡬν
- νμμ ν΄λ λ³λ‘ κ΄μ¬μν μ‘°νκ° κ°λ₯νλ€.
- μ‘°ν λ°©λ²
- 'ν΄λλ³': ν΄λλ³ μ μ₯λ κ΄μ¬μνλ€μ μ‘°ν κ°λ₯νλ€.
- 'μ 체': ν΄λμ μκ΄ μμ΄ νμμ΄ μ μ₯ν μ 체 κ΄μ¬μνλ€μ μ‘°ν κ°λ₯νλ€.
κΈ°λ₯ | λ©μλ, URL | μμ² | μλ΅ |
ν΄λλ³ κ΄μ¬μν μ‘°ν | GET, /api/folders/{folderId}/products | {folderId} :μ‘°νλ₯Ό μνλ ν΄λ id | Page<Product> |
ν΄λ μ€λ³΅ μμ± λ°©μ§νκΈ°
- μ€λ³΅ ν΄λλͺ
μμ± μ΄μ
- λ¬Έμ μ : νμ¬ ν΄λλͺ μ΄ μ€λ³΅ν΄μ μμ±λκ³ μμ΅λλ€!
- ν΄κ²°λ°©λ²: μμ±ν ν΄λλͺ μ΄ μ λ ₯μΌλ‘ λ€μ΄μμ λ, DB μ λμΌ ν΄λλͺ μ΄ μλ κ²½μ°μλ§ μμ±
- μμ ν νμΌ
- FolderService.java
- FolderRepository.java
+ μ€μ΅ : κ°μ ν΄λ λ΄ κ΄μ¬μν μ€λ³΅ λ±λ‘ λ°©μ§
- κ°μ ν΄λ λ΄μ μν μ€λ³΅ μμ± μ΄μ
- λ¬Έμ μ : νμ¬ κ°μ ν΄λλ΄μ μνμ΄ μ€λ³΅ μμ±λλ€.
- ν΄κ²°λ°©λ²: μνμ ν΄λλ₯Ό λ±λ‘ν λ κΈ°μ‘΄μ λ±λ‘λ ν΄λμΈμ§ νμΈνλ€.
- μμ ν νμΌ
- ProductService.java
- ProductRepository.java
'Springπ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν μ€νΈ μ½λ (0) | 2022.12.27 |
---|---|
OAuth2 (0) | 2022.12.27 |
μ€νλ§ μλ ¨ : Project MySelectShop (2) (0) | 2022.12.15 |
μ€νλ§ μλ ¨ : Project MySelectShop (1) (0) | 2022.12.13 |
T μμΉ΄λ°λ―Έ : JPA νλ‘κ·Έλλ° κΈ°μ΄ (2) (1) | 2022.12.13 |