Spring

Spring 데이터 관리(데이터 출력(모든), 삭제, 정렬, 검색, 저장, 불러오기, 존재 확인, 페이지 생성)

code2772 2022. 12. 9. 08:43
728x90
반응형

✔ 모든 데이터 출력

@Authored : 메서드가 자동으로 호출되고, 인스턴스가 자동으로 주입, 변수 및 메서드에 스프링이 관리하는 BEAN을 자동으로 매핑해준다.

 

🔏 모든 데이터 출력1

lic class AdminUserRepositoryTest extends Day4ApplicationTests {
    @Autowired //  메서드가 자동으로 호출되고, 인스턴스가 자동으로 주입 ,
    // 변수 및 메서드에 스프링이 관리하는 Bean을 자동으로 매핑해주는 개념
    private AdminUserRepository adminUserRepository;
    //
    // findById() 리터널이 optional
    @Test
    public void crud1(){// 모든 데이터 출력
        adminUserRepository.findAll().forEach(System.out::println);
        //findAll() 모든 내용을 가저온다
        //forEach() 해당 내용을 반복하는 기능
        // System.out::println ->  람다식에서 나온 문법, toString을 해주게 된다.
        // 내가 입력한 내용을 모두 출력해준다고 생각하면 된다.
        // 데이터기 많으면 부하가 발생할 수 있다.

findAll() : 모든 데이터를 출력 -> forEach() : 해당 내용을 반복하여 가져온다 -> System.out::println : toString 형으로 출력 

 

🔏 모든 데이터 출력2

for(AdminUser adminUser : adminUserRepository.findAll()){
    System.out.println(adminUser); //위와 동일하다.
}

향상된 for문을 이용하여 findAll()을 사용하여 모든 데이터를 출력

 

🔏 모든 데이터 출력3

List<AdminUser> adminUsers = adminUserRepository.findAll();// list에 담아서 사용하기
adminUsers.forEach(System.out::println); //  위 2개 모두 동일하다

List를 사용하여 findAll로 List에 담고 출력한다

 

 

✔ 데이터 정렬하기

@Test
public void crud2(){
    //Sort 클래스 .by (~에 의해) Sort.Direction 방향을 정렬하여 Desc 내림차순하고 , id(어떤걸 기준으로 할지까지 정해주기)
    List<AdminUser> adminUsers = adminUserRepository.findAll(Sort.by(Sort.Direction.DESC,"id"));
    adminUsers.forEach(System.out::println);
}

내림차순 예제) -> List에 finfAll()로 찾아 정렬한 데이터를 담는다. 내림차순은 Sort 클래스를 사용하여 Sort.by(~에 의해)를 이용하여 Sort.Direction 방향(DESC, ASC)을 설정해준다. 기준은 (Sort.Direction.DESC, "id") 여기서 "id"를 기준으로 하고있음

 

 

✔ 데이터 검색하기

 

🔏 데이터 검색하기1

@Test
// 데이터 검색하기
public void crud3(){
    List<Long> ids = new ArrayList<>();
    ids.add(3l);
    ids.add(5l);
    ids.add(6l);
    List<AdminUser> adminUsers = adminUserRepository.findAllById(ids);
    //findAllById(변수) 변수를 해당하는것을 모두 찾는다.

데이터를 검색하기 위해 List를 사용하는 방법이다. <Long> 형으로 List를 만들고 이 변수는 ids이다.

ids.add(변수); 를 선언하여 내가 찾고자 하는 내용을 추가한다.

이 List에서 findAllById(변수)를 이용하여 모든 ID에 관한 내가 검색하고자 하는 ids를 찾는다.

 

🔏 데이터 검색하기2

List<AdminUser> adminUsers = adminUserRepository.findAllById(Lists.newArrayList(3l,5l,6l));
// 따로 Array리스트랑 변수를 추가할 필요없이 내부에 코드를 입력하여 동일한 결과를 출력할 수 있다.
adminUsers.forEach(System.out::println);

위 데이터 검색하기1 을 List선언과 동시에 찾고자 하는 부분을 선언한 내용이다.

 

 

✔ 여러 데이터 저장

@Test
public void  crud4(){
    AdminUser adminUser1 = AdminUser.builder().userid("song2772")
            .userpw("2772").name("송이").build();
    AdminUser adminUser2 = AdminUser.builder().userid("mango")
            .userpw("8888").name("마앙고").build();

    adminUserRepository.saveAll(Lists.newArrayList(adminUser1,adminUser2));
    List<AdminUser> adminUsers = adminUserRepository.findAll();
    adminUsers.forEach(System.out::println);
}

기존 저장한 방식과 유사하다. saveAll을 사용하여 여러 데이터를 저장한다.

 

✔ 데이터 불러오기

 

🔏 데이터 불러오기1

@Test
@Transactional
public void crud5(){
    AdminUser adminUser = adminUserRepository.getOne(3l);
    //getOne = findById 와 동일하게 ID를 기반으로 찾는다
    //getOne은 단일 작업으로 생각하지 않고
    System.out.println(adminUser);
}

🔏 데이터 불러오기2

// 데이터 불러오기2
@Test
public void crud6() {
   // Optional<AdminUser> adminUser = adminUserRepository.findById(3l); 기존 불러오는 방식은 optional을 사용
  AdminUser adminUser = adminUserRepository.findById(3l).orElseThrow(); // null이 아닐경우
    System.out.println(adminUser);
}

 

✔ 데이터 개수 불러오기

// 데이터 개수 불러오기
@Test
public void crud7(){
    long count = adminUserRepository.count();
    System.out.println(count);
}

이는 먼저 변수를 선언하고 adminRepository에  .count()를 사용하여 데이터의 개수를 불러온다

 

✔ 아이디 존재 유무확인

@Test
public void crud8(){
    boolean exists = adminUserRepository.existsById(3l);
    //existsById(3l) : 존재하는지 있으면 -> true이고 count를 확인하기 때문에
    // 전체를 불러오는것은 데이터 효율적으로 좋지 않다
    System.out.println(exists);
}

existedById( 확인을 원하는 내용) : 내가 찾고다 하는 내용이 잇는지 확인한다. boolean을 사용하며 있으면 true 출력

 

✔ 데이터 삭제

  @Test
    public void crud9(){
//      adminUserRepository.deleteById(16l);

        adminUserRepository.delete(adminUserRepository.findById(7l).orElseThrow(RuntimeException::new));
        adminUserRepository.findAll().forEach(System.out::println);
    }

deleteById를 사용하여 해당하는 Id에 따라 삭제가 가능하고 또는 delete(adminRepository.findById().orElseThrow(RunTimeException::new))를 사용하여 삭제한다.

orElseThrow() : 메소드는 저장된 값이 존재하면 저장된 값을 출력하고, 아닌 경우 인자로 전달 된 예외를 발생

 

✔ 여러 데이터 삭제

 //여러 데이터 삭제
    @Test
    public void crud10(){
        //데이터 삭제시 select가 각각 일어남
//        adminUserRepository.deleteAll(adminUserRepository.findAllById(Lists.newArrayList(5l,9l)));
        adminUserRepository.deleteAllInBatch(adminUserRepository.findAllById(Lists.newArrayList(5l, 9l)));
        adminUserRepository.findAll().forEach(System.out::println);
    }

 

✔ 페이지 생성

@Test
public void crud11(){
    //import org.springframework.data.domain.Page; 확인!
    Page<AdminUser> adminUsers = adminUserRepository.findAll(PageRequest.of(0,3));
    System.out.println("🐔 page :" + adminUsers);
    //Page 2 of 4 containing com.koreait.day4.model.entity.AdminUser instances
    System.out.println("🐔 totalElements :" + adminUsers.getTotalElements());
    // 등록된 사람(게시물) 수를 출력
    System.out.println("🐔 totalPages :" + adminUsers.getTotalPages()); // page수
    System.out.println("🐔 numberOfElements :" + adminUsers.getNumberOfElements());
    // 해당 페이지에 몇개씩 있는지
    System.out.println("🐔 size :" + adminUsers.getSize());
    // 남은 사이즈를 확인 내가 보고있는 페이지는 0이기 때문에 size :3
    System.out.println("🐔 sort :" + adminUsers.getSort());
    adminUsers.getContent().forEach(System.out::println);
}

 

pageRequest.of(0,3) - Page를 0페이지(1) 부터 시작하고 한 페이지당 3개의 게시물? 로

11개의 데이터가 있다면 총 4페이지를 만들고 마지막 페이지에는 2개의 데이터가 있는것을 만든다

 

🐔 adminUsers : 따로 선언된 내용 출력

🐔 .getTotalElements() : 등록된 사람(게시물) 수를 출력

🐔 getTotalPages() : page수를 출력

🐔 getNumberOfElements() : 해당 페이지에 데이터(게시물)가 몇개씩 있는지

🐔 getSize() : 내가 보고 있는 페이지의 사이즈 , 남은 사이즈를 확인하기 위해 사용

🐔  getSort() : Sort여부를 확인할 수 있다

 

반응형