본문 바로가기
Spring

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

by code2772 2022. 12. 9.

[ 목차 ]

    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여부를 확인할 수 있다

     

    반응형