✔ 모든 데이터 출력
@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여부를 확인할 수 있다
'Spring' 카테고리의 다른 글
Spring (리스너, 연관 관계 메핑, 어노테이션) (0) | 2022.12.13 |
---|---|
Spring (Enum, Query Method 기본, Optional, @Bean) (0) | 2022.12.11 |
Spring Added dependencies 등 간편하게 사용 (0) | 2022.12.08 |
Spring 기본 (create, update, delete) (0) | 2022.12.08 |
Spring PostController (0) | 2022.12.08 |