본문 바로가기
IT/JPA

Spring Data JPA 기초 #1

by 최고영회 2019. 1. 7.
728x90
반응형
SMALL

Spring Data JPA에 대해서 알아보자. 

 

JPA 처리를 담당하는 Repository는 기본적으로 4가지가 있다. 

Repository<T, ID>

CrudRepository<T, ID>

PagingAndSortingRepository<T, ID>

JpaRepository<T, ID>

T는 Entity의 타입클래스이고 ID는 P.K 값의 Type 이다. 

 

CrudRepository는 관리되는 엔티티 클래스에 대해 정교한 CRUD 기능을 제공한다. 

public interface CrudRepository<T, ID extends Serializable>
  extends Repository<T, ID> {

  <S extends T> S save(S entity);      

  Optional<T> findById(ID primaryKey); 

  Iterable<T> findAll();               

  long count();                        

  void delete(T entity);               

  boolean existsById(ID primaryKey);   

  // … more functionality omitted.
}

 

PagingAndSoringRepository

public interface PagingAndSortingRepository<T, ID extends Serializable>
  extends CrudRepository<T, ID> {

  Iterable<T> findAll(Sort sort);

  Page<T> findAll(Pageable pageable);
}

 

// page size 20으로 된 전체 목록에서 두번째 페이지를 아래아 같이 쉽게 가져올 수 있다. 
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(new PageRequest(1, 20));

 

이제 아주 심플한 CRUD 를 해보자. 

pom.xml 에 JPA 를 이용하기 위한 dependency 정보를 넣어준다. 

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

 

Entiry 하나를 만든다. (Member.java)

 

Spring Boot project 를 Run 하면 member 테이블이 생성된 것을 확인할 수 있다. 

 

이제 위에서 살펴본 crudRepository 를 이용해 보자. 

Repository

package com.yhkim.study.member;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends CrudRepository<member, integer="">{
}
</member,>

 

Service

package com.yhkim.study.member;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class MemberService {
	
	@Autowired
	MemberRepository repo;
	
	public List getMemberList(){
		repo.findAll().forEach(mem->{
			log.info(mem.toString());
		});
		return (List) repo.findAll();
	}
	
	public void saveMember(Member member) {
		repo.save(member);
	}
	
	public void deleteMember(Member member) {
		repo.delete(member);
	}
}

 

Controller

@RestController
@Slf4j
public class APIController {
	
	@Autowired
	MemberService service;

	@RequestMapping(value="/api/userlist", method=RequestMethod.GET)
	public List getUserList(HttpServletRequest req) {
		log.info("call api from ", req.getRemoteAddr());
		return service.getMemberList();
	}

	@RequestMapping(value="/api/adduser", method=RequestMethod.POST)
	public List addUser(@RequestParam String userId, 
			@RequestParam String userName, 
			@RequestParam(required=false) String email, 
			@RequestParam(required=false) String cellphone
	) {
		Member m = new Member(userId, "");
		m.setName(userName);
		m.setEmail(email);
		m.setCellphone(cellphone);
		service.saveMember(m);
		return service.getMemberList();
	}
	
	@RequestMapping(value="/api/deluser", method=RequestMethod.DELETE)
	public List delUser(@RequestParam Integer userIdx) {
		Member m = new Member();
		m.setIdx(userIdx);
		service.deleteMember(m);
		return service.getMemberList();
	}
}

 

테스트 해 보자

 

잘 된다. 

Query Tools (#QueryBox) 로 확인한 결과 

 

브라우저에서 delete user 에 대한 처리 결과 (delete 후 select 하도록 처리)

 

 

 

 

 

 

728x90
반응형
LIST