๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring๐Ÿ€/๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ

[JPA] ๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ - user (UserRepository)

by @ENFJ 2023. 2. 11.

 

 

 
 

UserRepository ์ฝ”๋“œ

package com.example.projectpicker.user.repository;

import com.example.projectpicker.user.entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;



public interface UserRepository extends JpaRepository <UserEntity,String>{


    UserEntity findByUserEmail(String email);


    boolean existsByUserEmail(String email);
}

 

 


๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” class๊ฐ€ ์•„๋‹Œ interface๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค. ์™œ? (์ž˜ ๋ชฐ๋ผ์„œ ๊ตฌ๊ธ€๋ง!)

=> Repository๋ฅผ interface๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐœ๋ฐฉํ์‡ ์›์น™(OCP)๋ฅผ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Repository์˜ ๊ตฌํ˜„์ฒด์—์„œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ Repository๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์—๋Š” ์˜ํ–ฅ์ด ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค. 

 

<https://www.quora.com/Why-is-a-repository-in-Spring-Boot-an-interface-and-not-a-class>

 

public interface UserRepository extends JpaRepository <UserEntity,String>{


1. JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์— ๋”ฐ๋กœ @Repository๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•  ํ•„์š” ์—†๋‹ค.
+๊ธฐ๋ณธ์ ์ธ Create, Read, Update, Delete๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.


2. JpaRepository๋ฅผ ์ƒ์†๋ฐ›์„๋•Œ๋Š” ์‚ฌ์šฉ๋  Entity ํด๋ž˜์Šค์™€ ๊ธฐ๋ณธ ํ‚ค ํƒ€์ž… ์ด ๋“ค์–ด๊ฐ€๊ฒŒ๋œ๋‹ค.
<์—ฌ๊ธฐ์„œ ๋‚˜๋Š” UserEntity๋ฅผ ์ƒ์†๋ฐ›์„๊ฒƒ์ด๊ณ , ๊ธฐ๋ณธํ‚ค์ธ ID์˜ ํƒ€์ž…์€ String ์ด๋‹ค> ==> JpaRepository<T, ID>

 

 

UserEntity findByUserEmail(String email);

    // ์ด๋ฉ”์ผ๋กœ ํšŒ์›์„ ์กฐํšŒ
    // ์•„๋ž˜ ์ฝ”๋“œ๋Š” sql๋ฌธ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ’๋‹ค. (select * from tbl_user where email = ? )

 

boolean existsByUserEmail(String email);

    // ์ด๋ฉ”์ผ ์ค‘๋ณต ๊ฒ€์‚ฌ
    // select count(*) from tbl_user where email = ?