๐ Gradle
- ์์กด์ฑ ๊ด๋ฆฌ์ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ธฐ์
- maven์ xml์ ์ฌ์ฉ, gradle์ groovy๋ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉ
- ์คํ์์ค ๋น๋ ๋๊ตฌ(๊ฐ๋ฐ์ ์๋์ผ๋ก ๋น๋๋ฅผ ๋์์ฃผ๋ ํ๋ก๊ทธ๋จ)
๐ซ ORM(Object-Relational Mapping)
- ๊ฐ์ฒด์ ๊ด๊ณํ DB๋ฅผ ๋งคํ
- ๊ฐ์ฒด๋ฅผ ๋ง์น ์๋ฐ ์ปฌ๋ ์ ์ ์ ์ฅํ ์ ์๊ณ , ์ ์ ํ SQL์ ์์ฑํด์ DB๊ฐ์ฒด์ ์ ์ฅ
๐ lombok
- ํ ์ด๋ธ์ ๊ตฌ์กฐํํ ํด๋์ค(Entity, DTO, VO)์์ getter/setter ๋ฉ์๋์ toString(), equals(), hashCode()๋ฑ์ ๋ฉ์๋๋ฅผ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด๋ ธํ ์ด์
@ Data: ์๋์ผ๋ก getter/setter๋ฅผ ์ง์ @ AllArgsConstructor: ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ๋ ์์ฑ์ ์ง์ @ NoArgsConstructor: ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์๋ ์์ฑ์๋ฅผ ์ง์ @ Entity: DB ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐ @ Builder: ๋ณตํฉ ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ๊ณผ ํํ ๋ฐฉ๋ฒ์ ๋ถ๋ฆฌํ์ฌ ๋์ผํ ์์ฑ ์ ์ฐจ์์ ์๋ก ๋ค๋ฅธ
@Table: DB ํ
์ด๋ธ์ ์ด๋ฆ์ ๋ช
์(ํ
์ด๋ธ๋ช
๊ณผ ํด๋์ค๋ช
์ด ๋์ผํ ๊ฒฝ์ฐ ์๋ต)
admin_iser == AdminUser
---------- -----------
DB - ์ค๋ค์ดํฌํ๊ธฐ Java - ์นด๋ฉํ๊ธฐ
@Entity: DB์ ํ
์ด๋ธ์ ๋ปํ๋ ํด๋์ค
@Id: primary key๋ฅผ ๋ปํจ
@GeneratedValue: primary key์ ํค ์์ฑ ์ ๋ต(Strategy)์ ์ค์ ํ ๋ ์ฌ์ฉ
@Column: DB ํ๋๋ช
์ ๋ช
์(DBํ๋๋ช
๊ณผ ์๋ฐ ํด๋์ค ํ๋๋ช
์ด ๋์ผํ ๊ฒฝ์ฐ ์๋ต)
@Trasient: DB์๋ ์กด์ฌํ์ง ์๋ ํ๋์ ๋ช
์
public interface ์ธํฐํ์ด์ค๋ช
extends
JpaRepository<ํ
์ด๋ธ์๊ตฌํํ class๋ช
, PKํ์
(primary key์ ํ์
>{
SQL ์ฟผ๋ฆฌ๋ฅผ ๋์ ํ ๋ฉ์๋ ์ ์
}
Inteager๋ Double ํด๋์ค์ ๊ฐ์ด 'T' ํ์
์ ๊ฐ์ฒด๋ฅผ ํฌ์ฅํ๋ Wrapper Class ๋ชจ๋ ํ์
์ ์ปค๋ฒํ ์ ์๋ ํด๋์ค
(Optional์ ์ธ์คํด์ค๋ ๋ชจ๋ ํ์
์ ์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ฅ ํ ์ ์๋ค.)
NullPointerException ์์ธ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํ ์ข์ ๋ฐฉ๋ฒ
์์(๊ฐ์ฒด์์ฑ) -> ์ค๊ฐ(Optional ๊ฐ์ฒด ๋ฐํ) -> ๋(์ฒด์ด๋ ์ข
๋ฃ) 3๋จ๊ณ๋ก ๊ตฌํ
๊ฐ์ฒด ์์ฑ
์์
์ค๊ฐ
๋
๐ฅจ orElse๋ optional ๊ฐ์ฒด๊ฐ ๋น์ด์์ง ์๋, ๋น์๋ ๋ฌด์กฐ๊ฑด ์คํ!
๐ฅจ orElseGet์ ๋น์ด์์ ๋๋ง ์คํ!
package com.koreait.day3.model.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class AdminUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String userid;
private String userpw;
private String name;
private String status;
private LocalDateTime lastLoginAt;
private LocalDateTime regDate;
}
package com.koreait.day3.repository;
import com.koreait.day3.model.entity.AdminUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface AdminUserRepository extends JpaRepository<AdminUser, Long>{
}
package com.koreait.day3.repository;
import com.koreait.day3.Day3ApplicationTests;
import com.koreait.day3.model.entity.AdminUser;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.LocalDateTime;
import java.util.Optional;
public class AdminUserRepositoryTest extends Day3ApplicationTests {
//Day3ApplicationTests์ด public class๊ฐ ์๋๋ผ์ ์ํฌํธ ํด์ฃผ๋ ค๋ฉด public์ผ๋ก ๋ฐ๊ฟ์ค์ผํจ
@Autowired
private AdminUserRepository adminUserRepository;
@Test
public void create(){
AdminUser adminUser = AdminUser.builder().userid("banana")
.userpw("2222").name("๋ฐํ๋").build();
AdminUser newAdminUser = adminUserRepository.save(adminUser);
}
@Test
public void update(){
Optional<AdminUser> adminUser = adminUserRepository.findById(1L); //ID๋ก select
adminUser.ifPresent(
selectUsers -> {
//๋ฐ์ดํฐ ๊ฐ์๋งํผ ์ด ํ๋์ ํด๋ฌ๋ผ!
selectUsers.setUserpw("1004");
selectUsers.setLastLoginAt(LocalDateTime.now());
selectUsers.setName("์ฌ๊ณผํด");
adminUserRepository.save(selectUsers);
}
);
}
@Test
public void delete(){
Optional<AdminUser> adminUser = adminUserRepository.findById(1L);
adminUser.ifPresent(
selectUsers ->{
adminUserRepository.delete(selectUsers);
}
);
}
}